diff --git a/src/compiledata.cpp b/src/compiledata.cpp index 74033501..03c816a2 100644 --- a/src/compiledata.cpp +++ b/src/compiledata.cpp @@ -1,7 +1,7 @@ /*************************************************************************** * Copyright (C) 2005 to 2014 by Jonathan Duddington * * email: jonsd@users.sourceforge.net * - * Copyright (C) 2013 by Reece H. Dunn * + * Copyright (C) 2013-2015 by Reece H. Dunn * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * @@ -1649,6 +1649,7 @@ int LoadSpect(const char *path, int control) if(stream.Ok() == FALSE) { error("Failed to open: '%s'",path); + delete spectseq; return(0); } spectseq->Load(stream); @@ -1656,6 +1657,7 @@ int LoadSpect(const char *path, int control) if(spectseq->frames == NULL) { error("Bad vowel file, no frames: '%s'",path); + delete spectseq; return(0); } @@ -3997,6 +3999,7 @@ void CompileIntonation() { fclose(f_in); fclose(f_errors); + free(tune_data); return; } @@ -4183,6 +4186,7 @@ void CompileIntonation() } } fwrite(tune_data, n_tune_names, sizeof(TUNE), f_out); + free(tune_data); fclose(f_in); fclose(f_out); diff --git a/src/compiledict.cpp b/src/compiledict.cpp index 4c389670..8873bfbf 100644 --- a/src/compiledict.cpp +++ b/src/compiledict.cpp @@ -1,6 +1,7 @@ /*************************************************************************** * Copyright (C) 2005 to 2014 by Jonathan Duddington * * email: jonsd@users.sourceforge.net * + * Copyright (C) 2015 by Reece H. Dunn * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * @@ -870,7 +871,8 @@ static int compile_dictlist_file(const char *path, const char* filename) return(-1); } - fprintf(f_log,"Compiling: '%s'\n",fname); + if(f_log != NULL) + fprintf(f_log,"Compiling: '%s'\n",fname); linenum=0; @@ -900,7 +902,8 @@ static int compile_dictlist_file(const char *path, const char* filename) count++; } - fprintf(f_log,"\t%d entries\n",count); + if(f_log != NULL) + fprintf(f_log,"\t%d entries\n",count); fclose(f_in); return(0); } /* end of compile_dictlist_file */ @@ -1965,6 +1968,7 @@ int CompileDictionary(const char *dsource, const char *dict_name, FILE *log, cha { if(fname_err) strcpy(fname_err,fname_out); + fclose(f_in); return(-1); } sprintf(fname_temp,"%s%ctemp",path_home,PATHSEP); diff --git a/src/dictionary.cpp b/src/dictionary.cpp index c661d748..0391ce16 100644 --- a/src/dictionary.cpp +++ b/src/dictionary.cpp @@ -1,7 +1,7 @@ /*************************************************************************** * Copyright (C) 2005 to 2014 by Jonathan Duddington * * email: jonsd@users.sourceforge.net * - * Copyright (C) 2013 Reece H. Dunn * + * Copyright (C) 2013-2015 Reece H. Dunn * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * @@ -273,6 +273,8 @@ int LoadDictionary(Translator *tr, const char *name, int no_error) { fprintf(stderr,"Can't read dictionary file: '%s'\n",fname); } + if (f != NULL) + fclose(f); return(1); } diff --git a/src/espeakedit.cpp b/src/espeakedit.cpp index 361e7194..4fe48840 100644 --- a/src/espeakedit.cpp +++ b/src/espeakedit.cpp @@ -1,7 +1,7 @@ /*************************************************************************** * Copyright (C) 2005 to 2015 by Jonathan Duddington * * email: jonsd@users.sourceforge.net * - * Copyright (C) 2013 by Reece H. Dunn * + * Copyright (C) 2013-2015 by Reece H. Dunn * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * @@ -111,21 +111,21 @@ static const char *help_text = "\tCompile phoneme data in espeak-data/phsource\n" "\tand dictionary data in espeak-data/dictsource\n"; - // Initialise this in OnInit, not statically bool MyApp::OnInit(void) {//===================== int j; -const wxChar *p; char param[120]; - if(argc > 1) { - p = argv[1]; - j = 0; +#if wxUSE_UNICODE == 1 + wcstombs(param, argv[1], sizeof(param)); +#else + const char *p = argv[1]; while((param[j] = p[j]) != 0) j++; +#endif if((strcmp(param,"--help")==0) || (strcmp(param,"-h")==0)) { @@ -559,23 +559,20 @@ void MyFrame::OnAbout(wxCommandEvent& event) char buf[300]; wxString url_docs; - wxBoxSizer *topsizer; - HtmlWindow *html; - wxDialog dlg(this, wxID_ANY, wxString(_("About"))); - - topsizer = new wxBoxSizer(wxVERTICAL); - switch(event.GetId()) { case MENU_ABOUT: { + wxDialog dlg(this, wxID_ANY, wxString(_("About"))); + sprintf(buf,about_string,espeak_Info(NULL)); - html = new HtmlWindow(&dlg, wxID_ANY, wxDefaultPosition, wxSize(380, 160), wxHW_SCROLLBAR_NEVER); + HtmlWindow *html = new HtmlWindow(&dlg, wxID_ANY, wxDefaultPosition, wxSize(380, 160), wxHW_SCROLLBAR_NEVER); html -> SetBorders(0); html -> SetPage(wxString(buf,wxConvLocal)); html -> SetSize(html -> GetInternalRepresentation() -> GetWidth(), html -> GetInternalRepresentation() -> GetHeight()); + wxBoxSizer *topsizer = new wxBoxSizer(wxVERTICAL); topsizer -> Add(html, 1, wxALL, 10); //#if wxUSE_STATLINE diff --git a/src/extras.cpp b/src/extras.cpp index dd225d51..9f9a6e3f 100644 --- a/src/extras.cpp +++ b/src/extras.cpp @@ -1,7 +1,7 @@ /*************************************************************************** * Copyright (C) 2006 to 2011 by Jonathan Duddington * * email: jonsd@users.sourceforge.net * - * Copyright (C) 2013 by Reece H. Dunn * + * Copyright (C) 2013-2015 by Reece H. Dunn * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * @@ -369,6 +369,7 @@ void Lexicon_It(int pass) { str = wxString(buf, wxConvLocal); wxLogError(_T("Can't write file: ") + str); + fclose(f_in); return; } @@ -383,7 +384,7 @@ void Lexicon_It(int pass) f_listx = fopen(buf,"w"); wxLogStatus(_T("Pass 1")); } - else + else if(pass == 2) { CompileDictionary(path_dsource,"it",NULL,NULL,0); sprintf(buf,"%s/it_listx2",path_dsource); @@ -711,6 +712,7 @@ void Lexicon_De() if((f_out = fopen("compare_de","w")) == NULL) { wxLogError(_T("Can't write file ")); + fclose(f_out); return; } LoadVoice("de",0); @@ -1646,6 +1648,7 @@ void MakeWordFreqList() free(p); } fclose(f_out); + free(w_list); } // end of Make WorkFreqList diff --git a/src/prosodydisplay.cpp b/src/prosodydisplay.cpp index 36e64c9e..e25fba96 100644 --- a/src/prosodydisplay.cpp +++ b/src/prosodydisplay.cpp @@ -1,6 +1,7 @@ /*************************************************************************** * Copyright (C) 2005 to 2014 by Jonathan Duddington * * email: jonsd@users.sourceforge.net * + * Copyright (C) 2015 by Reece H. Dunn * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * @@ -106,7 +107,10 @@ void ReadPhondataManifest() } if((manifest = (NAMETAB *)realloc(manifest, n_lines * sizeof(NAMETAB))) == NULL) + { + fclose(f); return; + } n_manifest = 0; while(fgets(buf, sizeof(buf), f) != NULL) diff --git a/src/spect.cpp b/src/spect.cpp index 2181e83d..493cb8d9 100644 --- a/src/spect.cpp +++ b/src/spect.cpp @@ -256,25 +256,33 @@ int SpectFrame::ImportSPC2(wxInputStream& stream, float &time_acc) if(cy.flags & 0x04) markers |= 8; - spect_data = new USHORT[nx]; - - if(spect_data == NULL) + if(nx>0) { - wxLogError(_T("Failed to allocate memory")); - return(1); - } + spect_data = new USHORT[nx]; - max_y = 0; - for(ix=0; ixdata[ix]; - if(spect_data[ix] > max_y) - max_y = spect_data[ix]; + if(spect_data == NULL) + { + wxLogError(_T("Failed to allocate memory")); + return(1); + } + + max_y = 0; + for(ix=0; ixdata[ix]; + if(spect_data[ix] > max_y) + max_y = spect_data[ix]; + } } - if(nx==0) + else { nx = int(8000/dx); spect_data = new USHORT[nx]; + if(spect_data == NULL) + { + wxLogError(_T("Failed to allocate memory")); + return(1); + } for(ix=0; ixImport(stream) != 0) break; + if(frame->Import(stream) != 0) + { + delete frame; + break; + } } else if(import==2) { - if(frame->ImportSPC2(stream,time_acc) != 0) break; + if(frame->ImportSPC2(stream,time_acc) != 0) + { + delete frame; + break; + } } else { - if(frame->Load(stream, file_format) != 0) break; + if(frame->Load(stream, file_format) != 0) + { + delete frame; + break; + } } frames[numframes++] = frame; diff --git a/src/synthdata.cpp b/src/synthdata.cpp index a82d77d0..a90b9b2f 100644 --- a/src/synthdata.cpp +++ b/src/synthdata.cpp @@ -1,6 +1,7 @@ /*************************************************************************** * Copyright (C) 2005 to 2014 by Jonathan Duddington * * email: jonsd@users.sourceforge.net * + * Copyright (C) 2015 by Reece H. Dunn * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * @@ -98,6 +99,7 @@ static char *ReadPhFile(void *ptr, const char *fname, int *size) if(fread(p,1,length,f_in) != length) { fclose(f_in); + Free(p); return(NULL); } @@ -493,7 +495,11 @@ void LoadConfig(void) if(memcmp(buf,"log",3)==0) { if(sscanf(&buf[4],"%d %s",&logging_type,string)==2) + { + if (f_logespeak) + fclose(f_logespeak); f_logespeak = fopen(string,"w"); + } } else if(memcmp(buf,"tone",4)==0) diff --git a/src/voices.cpp b/src/voices.cpp index 5134eb36..3da17c90 100644 --- a/src/voices.cpp +++ b/src/voices.cpp @@ -1,6 +1,7 @@ /*************************************************************************** * Copyright (C) 2005 to 2015 by Jonathan Duddington * * email: jonsd@users.sourceforge.net * + * Copyright (C) 2015 by Reece H. Dunn * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * @@ -1100,7 +1101,10 @@ voice_t *LoadVoice(const char *vname, int control) new_translator->dict_min_size = dict_min; LoadDictionary(new_translator, new_dictionary, control & 4); if(dictionary_name[0]==0) + { + DeleteTranslator(new_translator); return(NULL); // no dictionary loaded + } new_translator->dict_condition = conditional_rules; diff --git a/src/vowelchart.cpp b/src/vowelchart.cpp index e87d4e32..738d3f20 100644 --- a/src/vowelchart.cpp +++ b/src/vowelchart.cpp @@ -1,7 +1,7 @@ /*************************************************************************** * Copyright (C) 2005 to 2013 by Jonathan Duddington * * email: jonsd@users.sourceforge.net * - * Copyright (C) 2013 Reece H. Dunn * + * Copyright (C) 2013-2015 Reece H. Dunn * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * @@ -225,6 +225,7 @@ static int VowelChartDir(wxDC *dc, wxBitmap *bitmap) if(stream.Ok() == FALSE) { path = wxFindNextFile(); + delete spectseq; continue; } spectseq->Load(stream); @@ -328,6 +329,7 @@ static int VowelChartList(wxDC *dc, wxBitmap *bitmap, char *fname) filename.SetExt(_T("png")); bitmap->SaveFile(filename.GetFullPath(),wxBITMAP_TYPE_PNG); + fclose(f_in); return(count); } @@ -583,7 +585,10 @@ void MakeVowelLists(void) ix = GetFileLength(fname); prog_log_table = (PHONEME_PROG_LOG *)malloc(ix); if(prog_log_table == NULL) + { + fclose(f_prog_log); return; + } ix = fread(prog_log_table, 1, ix, f_prog_log); fclose(f_prog_log); n_prog_log = ix / sizeof(PHONEME_PROG_LOG); @@ -604,7 +609,11 @@ void MakeVowelLists(void) // select the phoneme table by name // if(SetVoiceByName(phoneme_tab_list[table].name) != 0) continue; - if(SelectPhonemeTableName(phoneme_tab_list[table].name) < 0) continue; + if(SelectPhonemeTableName(phoneme_tab_list[table].name) < 0) + { + fclose(f); + continue; + } voice_found = 0; if((LoadVoice(phoneme_tab_list[table].name, 0) != NULL) && (translator->data_dictrules != NULL))