diff -u3 aris/src/aio.c aris-p/src/aio.c --- aris/src/aio.c 2022-08-14 03:02:55.000000000 -0300 +++ aris-p/src/aio.c 2022-08-14 13:37:23.538876703 -0300 @@ -237,7 +237,7 @@ int rule = -1, sen_depth = 0, line_num = 0; unsigned char * text, * file; text = file = NULL; - short * refs; + short * refs = 0; int i; got_rule = got_refs = got_depth = got_file = got_text = 0; diff -u3 aris/src/app.c aris-p/src/app.c --- aris/src/app.c 2022-08-14 03:02:55.000000000 -0300 +++ aris-p/src/app.c 2022-08-14 13:44:24.985897100 -0300 @@ -46,6 +46,8 @@ #include "elm-conn.xpm" #include "nil-conn.xpm" +aris_app * the_app = 0; + // Macro to get the length of a file. #ifndef WIN32 @@ -77,7 +79,7 @@ aris_app * app = (aris_app *) calloc (1, sizeof (aris_app)); if (!app) { - perror (NULL); + PERROR (NULL); return NULL; } @@ -212,8 +214,8 @@ int the_app_get_color_by_type (aris_app * app, char * type) { - int ret; int i; + int ret = 0; for (i = 4; i < NUM_DISPLAY_CONFS; i++) { if (!strcmp (type, display_conf[i].label)) @@ -337,7 +339,7 @@ conf_file = fopen (path, "r+"); if (!conf_file) { - perror ("load_config_file"); + PERROR ("load_config_file"); return -2; } free (path); @@ -386,14 +388,17 @@ config_file = fopen (path, "w"); if (!config_file) { - perror (NULL); + PERROR (NULL); return -2; } unsigned char * conf_def; conf_def = config_default (); if (!conf_def) - return AEC_MEM; + { + fclose (config_file); + return AEC_MEM; + } int len, rc; len = strlen (conf_def); @@ -401,7 +406,8 @@ rc = fwrite (conf_def, 1, len, config_file); if (rc != len) { - perror ("default_config_file_fwrite"); + PERROR ("default_config_file_fwrite"); + fclose (config_file); return -2; } @@ -849,6 +855,7 @@ if (ret_chk != 1) { printf ("Submission Error - please specify a valid email address.\n"); + free (email_base); return -3; } @@ -903,7 +910,7 @@ if (!ap_file) { free (ap_file_name); - perror (NULL); + PERROR (NULL); return AEC_IO; } diff -u3 aris/src/app.h aris-p/src/app.h --- aris/src/app.h 2022-08-14 03:02:55.000000000 -0300 +++ aris-p/src/app.h 2022-08-14 12:27:53.121674867 -0300 @@ -106,6 +106,6 @@ int app_set_color (aris_app * app, int index, int red, int green, int blue); /* The main application */ -aris_app * the_app; +extern aris_app * the_app; #endif /* ARIS_APP_H */ diff -u3 aris/src/aris-proof.c aris-p/src/aris-proof.c --- aris/src/aris-proof.c 2022-08-14 03:02:55.000000000 -0300 +++ aris-p/src/aris-proof.c 2022-08-14 13:45:20.882899806 -0300 @@ -607,7 +607,7 @@ //fprintf (stderr, "create_sentence: sen->line_num == %i\n", sentence_get_line_no (sen)); - undo_info ui; + undo_info ui = { 0 }; ui.type = -1; if (undo) ui = undo_info_init_one (ap, sen, UIT_ADD_SEN); diff -u3 aris/src/aris.c aris-p/src/aris.c --- aris/src/aris.c 2022-08-14 03:02:55.000000000 -0300 +++ aris-p/src/aris.c 2022-08-14 13:23:11.497835467 -0300 @@ -565,7 +565,7 @@ sizeof (char)); if (!ai->file_name[cur_file]) { - perror (NULL); + PERROR (NULL); exit (EXIT_FAILURE); } @@ -638,7 +638,7 @@ sizeof (char)); if (!ai->latex_name[cur_latex]) { - perror (NULL); + PERROR (NULL); exit (EXIT_FAILURE); } @@ -761,7 +761,7 @@ proof = (proof_t **) calloc (cur_file, sizeof (proof_t *)); if (!proof) { - perror (NULL); + PERROR (NULL); exit (EXIT_FAILURE); } diff -u3 aris/src/callbacks.c aris-p/src/callbacks.c --- aris/src/callbacks.c 2022-08-14 03:02:55.000000000 -0300 +++ aris-p/src/callbacks.c 2022-08-14 14:11:17.803975156 -0300 @@ -643,22 +643,34 @@ proof = aris_proof_to_proof (ap); if (!proof) - return AEC_MEM; + { + free (fname); + return AEC_MEM; + } ret = aio_save (proof, fname); if (ret < 0) - return AEC_MEM; + { + free (fname); + return AEC_MEM; + } - undo_info ui; + undo_info ui = { 0 }; ui.type = -1; ret = aris_proof_set_changed (ap, 0, ui); if (ret < 0) - return AEC_MEM; + { + free (fname); + return AEC_MEM; + } ret = aris_proof_set_filename (ap, fname); if (ret < 0) - return AEC_MEM; + { + free (fname); + return AEC_MEM; + } free (fname); } @@ -1076,7 +1088,8 @@ FILE * conf_file; char * path, * home_dir; - int alloc_size, path_pos = 0; + int alloc_size = 0; + int path_pos = 0; home_dir = getenv ("HOME"); if (!home_dir) @@ -1097,7 +1110,7 @@ conf_file = fopen (path, "w"); if (!conf_file) { - perror (NULL); + PERROR (NULL); gtk_widget_destroy (dialog); return -2; } diff -u3 aris/src/conf-file.c aris-p/src/conf-file.c --- aris/src/conf-file.c 2022-08-14 03:02:55.000000000 -0300 +++ aris-p/src/conf-file.c 2022-08-14 13:59:23.218940572 -0300 @@ -333,6 +333,7 @@ } else { + free (ret); ret = NULL; } @@ -441,6 +442,7 @@ if (ret_chk != 1) strcpy (size, _("Default")); */ + free (size); size = obj->label; alloc_size = strlen (size) + 16 + (int) log10 ((double) val) + 1; diff -u3 aris/src/goal.c aris-p/src/goal.c --- aris/src/goal.c 2022-08-14 03:02:55.000000000 -0300 +++ aris-p/src/goal.c 2022-08-14 13:46:40.826903675 -0300 @@ -303,7 +303,7 @@ NULL, GTK_POS_BOTTOM, 1, 1); gtk_widget_show_all (sen->panel); - undo_info ui; + undo_info ui = { 0 }; ui.type = -1; int ret; @@ -335,7 +335,7 @@ gtk_widget_override_background_color (sen->eventbox, GTK_STATE_NORMAL, NULL); } - undo_info ui; + undo_info ui = { 0 }; ui.type = -1; sen_parent_rem_sentence ((sen_parent *) goal, SEN_PARENT (goal)->focused->value); @@ -369,5 +369,7 @@ gtk_window_set_title (GTK_WINDOW (SEN_PARENT (goal)->window), new_title); + free (new_title); + return 0; } diff -u3 aris/src/interop-isar.c aris-p/src/interop-isar.c --- aris/src/interop-isar.c 2022-08-14 03:02:55.000000000 -0300 +++ aris-p/src/interop-isar.c 2022-08-14 13:55:10.619928347 -0300 @@ -604,6 +604,7 @@ // next will be the name. // That's not exactly important though. // Mostly want the includes. + return 0; } int @@ -1465,7 +1466,7 @@ pos += 14; } - int fun_pos; + int fun_pos = 0; //TODO: Calculate the ACTUAL size this should be. @@ -1708,7 +1709,8 @@ int isar_parse_datatype (char * type, vec_t * constructors) { - int init_pos, pos; + int init_pos = 0; + int pos = 0; int i, chk; init_pos = 0; @@ -1741,7 +1743,8 @@ int isar_parse_case (char * cs, char ** out_str) { - vec_t * pre, * post; + vec_t * pre = 0; + vec_t * post = 0; int i, pos, init_pos; char * var; int out_pos; @@ -1782,7 +1785,7 @@ tmp_str[pos - init_pos] = '\0'; // Process it, converting it to a notation aris will recognize. - char * new_str; + char * new_str = 0; //new_str = isar_convert (tmp_str); //if (!new_str) // return -1; @@ -2064,7 +2067,7 @@ if (chk) { fclose (file); - perror (NULL); + PERROR (NULL); return -1; } @@ -2074,7 +2077,7 @@ if (chk) { fclose (file); - perror (NULL); + PERROR (NULL); return -1; } @@ -2093,6 +2096,7 @@ if (!ret_chk_str) { // Invalid .thy file, return an error. + free (buffer); return -2; } @@ -2122,15 +2126,25 @@ chk = get_std_seqs (); if (chk == -1) - return -1; + { + free (buffer); + return -1; + } refs = init_vec (sizeof (char *)); if (!refs) - return -1; + { + free (buffer); + return -1; + } lms = init_vec (sizeof (char *)); if (!lms) - return -1; + { + free (buffer); + destroy_vec (refs); + return -1; + } // After this, buf_pos will point to the position of 'begin'. buf_pos = strstr (buffer, "begin"); @@ -2138,6 +2152,9 @@ if (strncmp (buf_pos, "begin", 5)) { // Error stuff. + free (buffer); + destroy_vec (refs); + destroy_vec (lms); return -2; } diff -u3 aris/src/list.c aris-p/src/list.c --- aris/src/list.c 2022-08-14 03:02:55.000000000 -0300 +++ aris-p/src/list.c 2022-08-14 13:23:38.384836768 -0300 @@ -37,7 +37,7 @@ ls = (list_t *) calloc (1, sizeof (list_t)); if (!ls) { - perror (NULL); + PERROR (NULL); return NULL; } @@ -107,7 +107,7 @@ ins_itm = (item_t *) calloc (1, sizeof (item_t)); if (!ins_itm) { - perror (NULL); + PERROR (NULL); return NULL; } ins_itm->prev = ins_itm->next = NULL; diff -u3 aris/src/process.c aris-p/src/process.c --- aris/src/process.c 2022-08-14 03:02:55.000000000 -0300 +++ aris-p/src/process.c 2022-08-14 14:18:49.035996995 -0300 @@ -26,6 +26,8 @@ #include #include +struct connectives_list main_conns = { 0 }; + /* Eliminates a negation from a string. * input: * not_str - the string from which to eliminate the negation. @@ -396,7 +398,8 @@ return 0; //Temporary strings for strstr. - unsigned char * o_str, * c_str; + unsigned char * o_str = (unsigned char *) !0; + unsigned char * c_str = (unsigned char *) !0; //Position indicators and helpers. unsigned int o_pos, c_pos, chk_pos; @@ -715,6 +718,8 @@ { int i; + CHECK_ALLOC (in_str, -1); + for (i = in_pos; in_str[i] != '\0'; i++) { if (in_str[i] == '(') @@ -1263,7 +1268,10 @@ rsen = sym_str + strlen (sym); if (strstr (rsen, sym)) - return -2; + { + free (lsen); + return -2; + } int ret_chk; @@ -1930,7 +1938,8 @@ { int n, i; unsigned char * out_str; - int out_pos, alloc_size; + int out_pos = 0; + int alloc_size; sscanf (in_str, "%i", &n); diff -u3 aris/src/process.h aris-p/src/process.h --- aris/src/process.h 2022-08-14 03:02:55.000000000 -0300 +++ aris-p/src/process.h 2022-08-14 12:28:06.760675527 -0300 @@ -170,7 +170,7 @@ // The main connectives. -struct connectives_list main_conns; +extern struct connectives_list main_conns; // Definitions. diff -u3 aris/src/proof.c aris-p/src/proof.c --- aris/src/proof.c 2022-08-14 03:02:55.000000000 -0300 +++ aris-p/src/proof.c 2022-08-14 14:21:59.196006198 -0300 @@ -40,17 +40,24 @@ proof_t * pf = (proof_t *) calloc (1, sizeof (proof_t)); if (!pf) { - perror (NULL); + PERROR (NULL); return NULL; } pf->everything = init_list (); if (!pf->everything) - return NULL; + { + free (pf); + return NULL; + } pf->goals = init_list (); if (!pf->goals) - return NULL; + { + destroy_list (pf->everything); + free (pf); + return NULL; + } return pf; } @@ -227,7 +234,7 @@ file = fopen (filename, "w"); if (!file) { - perror ("proof.c: "); + PERROR (NULL); exit (EXIT_FAILURE); } diff -u3 aris/src/rules-table.c aris-p/src/rules-table.c --- aris/src/rules-table.c 2022-08-14 03:02:55.000000000 -0300 +++ aris-p/src/rules-table.c 2022-08-14 14:23:56.076011854 -0300 @@ -58,7 +58,7 @@ rg = (rules_group *) calloc (1, sizeof (rules_group)); if (!rg) { - perror (NULL); + PERROR (NULL); return NULL; } @@ -114,7 +114,7 @@ rt = (rules_table *) calloc (1, sizeof (rules_table)); if (!rt) { - perror (NULL); + PERROR (NULL); return NULL; } @@ -234,7 +234,7 @@ sentence_set_rule (sen, -1); - undo_info ui; + undo_info ui = { 0 }; ui.type = -1; ret = aris_proof_set_changed (the_app->focused, 1, ui); if (ret < 0) @@ -321,7 +321,7 @@ sentence_set_rule (sen, index); - undo_info ui; + undo_info ui = { 0 }; ui.type = -1; ret = aris_proof_set_changed (the_app->focused, 1, ui); if (ret < 0) diff -u3 aris/src/sentence.c aris-p/src/sentence.c --- aris/src/sentence.c 2022-08-14 03:02:55.000000000 -0300 +++ aris-p/src/sentence.c 2022-08-14 14:28:09.381024114 -0300 @@ -319,6 +319,7 @@ //There is an error, so exit the function. fprintf (stderr, "Print Error - \ Unable to print the correct characters to a string.\n"); + free (new_label); return -1; } @@ -890,7 +891,7 @@ if (sp->type == SEN_PARENT_TYPE_PROOF) { - undo_info ui; + undo_info ui = { 0 }; ui.type = -1; ret = aris_proof_set_changed ((aris_proof *) sp, 1, ui); if (ret < 0) @@ -1495,7 +1496,7 @@ old_len = strlen (sen_text); diff_pos = find_difference (sen_text, (unsigned char *) text); - undo_info ui; + undo_info ui = { 0 }; if (sp->type == SEN_PARENT_TYPE_PROOF) { diff -u3 aris/src/sexpr-process.c aris-p/src/sexpr-process.c --- aris/src/sexpr-process.c 2022-08-14 03:02:55.000000000 -0300 +++ aris-p/src/sexpr-process.c 2022-08-14 14:29:23.364027694 -0300 @@ -1106,7 +1106,7 @@ if (isalnum (sen[i])) { - int k; + int k = 0; int start, end; int new_id; diff -u3 aris/src/typedef.h aris-p/src/typedef.h --- aris/src/typedef.h 2022-08-14 03:02:55.000000000 -0300 +++ aris-p/src/typedef.h 2022-08-14 14:07:19.370963617 -0300 @@ -52,8 +52,18 @@ #define N_(String) String #endif -#define REPORT() fprintf (stderr, "%s:%i reporting!\n", __FILE__, __LINE__); -#define CHECK_ALLOC(o,r) if (!(o)) {perror (NULL); return r; } + +/* double expansion macro, needed to print debug info in PERROR + and CHECK_ALLOC */ +#define _S_(X) #X +#define _S(X) _S_(X) + +#define PERROR(s) { REPORT (); perror(s); } +#define REPORT() fprintf (stderr, "%s:%i reporting!\n", __FILE__, __LINE__) +#define CHECK_ALLOC(o,r) if (!(o)) { \ + perror ("CHECK_ALLOC FAILED: " __FILE__ ", line " _S(__LINE__) ); \ + exit (EXIT_FAILURE); \ + } enum ARIS_ERROR_CODES { AEC_MEM = -1, /* Memory Error */ diff -u3 aris/src/undo.c aris-p/src/undo.c --- aris/src/undo.c 2022-08-14 03:02:55.000000000 -0300 +++ aris-p/src/undo.c 2022-08-14 14:27:01.460020826 -0300 @@ -90,7 +90,10 @@ sd = sentence_copy_to_data (sen); if (!sd) - return ret; + { + free (text); + return ret; + } if (sd->text) free (sd->text); @@ -260,7 +263,7 @@ sen_data * sd; GtkTextBuffer * buffer; int ln; - sentence * sen; + sentence * sen = 0; sd = (sen_data *) ui_itr->value; diff -u3 aris/src/var.c aris-p/src/var.c --- aris/src/var.c 2022-08-14 03:02:55.000000000 -0300 +++ aris-p/src/var.c 2022-08-14 14:27:42.988022836 -0300 @@ -38,7 +38,7 @@ var = (variable *) calloc (1, sizeof (variable)); if (!var) { - perror (NULL); + PERROR (NULL); return NULL; } @@ -49,7 +49,8 @@ var->text = (unsigned char *) calloc (text_len + 1, sizeof (char)); if (!var->text) { - perror (NULL); + PERROR (NULL); + free (var); return NULL; } diff -u3 aris/src/vec.c aris-p/src/vec.c --- aris/src/vec.c 2022-08-14 03:02:55.000000000 -0300 +++ aris-p/src/vec.c 2022-08-14 14:43:17.980068087 -0300 @@ -37,7 +37,7 @@ v = (vec_t *) calloc (1, sizeof (vec_t)); if (!v) { - perror (NULL); + PERROR (NULL); return NULL; } @@ -48,7 +48,8 @@ v->stuff = calloc (1, stuff_size); if (!v->stuff) { - perror (NULL); + PERROR (NULL); + free (v); return NULL; }