diff --git a/pd/src/d_soundfile.c b/pd/src/d_soundfile.c index 04a6644eb3c7045c2d9969c4959c0f4f0d9a1e87..285720ea94cdc4d1cef3fca90a3514bbec1ccef5 100644 --- a/pd/src/d_soundfile.c +++ b/pd/src/d_soundfile.c @@ -407,12 +407,15 @@ int open_soundfile(const char *dirname, const char *filename, int headersize, long skipframes) { char buf[FILENAME_MAX], *bufptr; - int fd; + int fd, sf_fd; fd = open_via_path(dirname, filename, "", buf, &bufptr, FILENAME_MAX, 1); if (fd < 0) return (-1); - else return (open_soundfile_via_fd(fd, headersize, p_bytespersamp, - p_bigendian, p_nchannels, p_bytelimit, skipframes)); + sf_fd = open_soundfile_via_fd(fd, headersize, p_bytespersamp, + p_bigendian, p_nchannels, p_bytelimit, skipframes); + if (sf_fd < 0) + sys_close(fd); + return (sf_fd); } /* open a soundfile, using open_via_canvas(). This is used by readsf~ in @@ -423,12 +426,15 @@ int open_soundfile_via_canvas(t_canvas *canvas, const char *filename, int header long skipframes) { char buf[FILENAME_MAX], *bufptr; - int fd; + int fd, sf_fd; fd = canvas_open(canvas, filename, "", buf, &bufptr, FILENAME_MAX, 1); if (fd < 0) return (-1); - else return (open_soundfile_via_fd(fd, headersize, p_bytespersamp, - p_bigendian, p_nchannels, p_bytelimit, skipframes)); + sf_fd = open_soundfile_via_fd(fd, headersize, p_bytespersamp, + p_bigendian, p_nchannels, p_bytelimit, skipframes); + if (sf_fd < 0) + sys_close(fd); + return (sf_fd); } static void soundfile_xferin_sample(int sfchannels, int nvecs, t_sample **vecs, diff --git a/pd/src/g_canvas.c b/pd/src/g_canvas.c index 0ece98d49e1df80200cb61c1ae6b996dae07d586..79cb8badb6af7aed04f5c375d29f8b996a7ec7de 100644 --- a/pd/src/g_canvas.c +++ b/pd/src/g_canvas.c @@ -646,8 +646,8 @@ void canvas_setbounds(t_canvas *x, int x1, int y1, int x2, int y2) t_symbol *canvas_makebindsym(t_symbol *s) { char buf[MAXPDSTRING]; - strcpy(buf, "pd-"); - strcat(buf, s->s_name); + snprintf(buf, MAXPDSTRING-1, "pd-%s", s->s_name); + buf[MAXPDSTRING-1] = 0; return (gensym(buf)); } diff --git a/pd/src/g_editor.c b/pd/src/g_editor.c index 7d11efdc6eca0e0d76f9a47cd2f5a17316b6d3dd..214a7a74cb215c27add757569635d8bdb4096a15 100644 --- a/pd/src/g_editor.c +++ b/pd/src/g_editor.c @@ -3060,7 +3060,9 @@ void canvas_done_popup(t_canvas *x, t_float which, t_float xpos, } else { - strcpy(namebuf, class_gethelpname(pd_class(&y->g_pd))); + strncpy(namebuf, class_gethelpname(pd_class(&y->g_pd)), + MAXPDSTRING-1); + namebuf[MAXPDSTRING-1] = 0; dir = class_gethelpdir(pd_class(&y->g_pd)); } if (strlen(namebuf) < 4 || diff --git a/pd/src/g_readwrite.c b/pd/src/g_readwrite.c index dd2f5ef7ecc7121615fd9f4c176769f5082e7fdb..8258f30763e94022f3aa88cda452af32f5806678 100644 --- a/pd/src/g_readwrite.c +++ b/pd/src/g_readwrite.c @@ -190,7 +190,6 @@ void glist_readfrombinbuf(t_glist *x, t_binbuf *b, char *filename, int selectem) strcmp(vec[message].a_w.w_symbol->s_name, "data")) { pd_error(x, "%s: file apparently of wrong type", filename); - binbuf_free(b); return; } /* read in templates and check for consistency */ @@ -202,7 +201,10 @@ void glist_readfrombinbuf(t_glist *x, t_binbuf *b, char *filename, int selectem) int ntemplateargs = 0, newnargs; nline = canvas_scanbinbuf(natoms, vec, &message, &nextmsg); if (nline < 2) + { + t_freebytes(templateargs, sizeof(*templateargs) * ntemplateargs); break; + } else if (nline > 2) canvas_readerror(natoms, vec, message, nline, "extra items ignored"); @@ -243,10 +245,10 @@ void glist_readfrombinbuf(t_glist *x, t_binbuf *b, char *filename, int selectem) { error("%s: template doesn't match current one", templatesym->s_name); - template_free(newtemplate); + pd_free(&newtemplate->t_pdobj); return; } - template_free(newtemplate); + pd_free(&newtemplate->t_pdobj); } while (nextmsg < natoms) { @@ -608,6 +610,7 @@ t_binbuf *glist_writetobinbuf(t_glist *x, int wholething) ((t_scalar *)y)->sc_vec, b, 0); } } + t_freebytes(templatevec, ntemplates * sizeof(*templatevec)); return (b); } diff --git a/pd/src/g_template.c b/pd/src/g_template.c index 5e8c8d39739a8c50de7f2a9c36664db6028bbf74..8c57631ec861ce14d2fe38b6d4f33b67074cee80 100644 --- a/pd/src/g_template.c +++ b/pd/src/g_template.c @@ -745,7 +745,7 @@ static void *gtemplate_new(t_symbol *s, int argc, t_atom *argv) { t_symbol *sym = atom_getsymbolarg(0, argc, argv); if (argc >= 1) - argc--; argv++; + argc--, argv++; if (gtemplate_cancreate(sym, argc, argv)) { return (gtemplate_donew(canvas_makebindsym(sym), argc, argv)); diff --git a/pd/src/m_binbuf.c b/pd/src/m_binbuf.c index f799c6add019c123ff62677c65ef097cda68483c..69d5c39770dc9b308ec54c530596e4ca0d38b244 100644 --- a/pd/src/m_binbuf.c +++ b/pd/src/m_binbuf.c @@ -417,6 +417,7 @@ void binbuf_addbinbuf(t_binbuf *x, t_binbuf *y) } binbuf_add(x, z->b_n, z->b_vec); + binbuf_free(z); //fprintf(stderr,"done binbuf_addbinbuf\n"); } @@ -948,10 +949,11 @@ int binbuf_read(t_binbuf *b, char *filename, char *dirname, int crflag) char *buf; char namebuf[MAXPDSTRING]; - namebuf[0] = 0; if (*dirname) - strcat(namebuf, dirname), strcat(namebuf, "/"); - strcat(namebuf, filename); + snprintf(namebuf, MAXPDSTRING-1, "%s/%s", dirname, filename); + else + snprintf(namebuf, MAXPDSTRING-1, "%s", filename); + namebuf[MAXPDSTRING-1] = 0; if ((fd = binbuf_doopen(namebuf, 0)) < 0) { @@ -1043,10 +1045,12 @@ int binbuf_write(t_binbuf *x, char *filename, char *dir, int crflag) int indx, deleteit = 0; int ncolumn = 0; - fbuf[0] = 0; if (*dir) - strcat(fbuf, dir), strcat(fbuf, "/"); - strcat(fbuf, filename); + snprintf(fbuf, MAXPDSTRING-1, "%s/%s", dir, filename); + else + snprintf(fbuf, MAXPDSTRING-1, "%s", filename); + fbuf[MAXPDSTRING-1] = 0; + if (!strcmp(filename + strlen(filename) - 4, ".pat") || !strcmp(filename + strlen(filename) - 4, ".mxt")) { @@ -1136,7 +1140,7 @@ static t_binbuf *binbuf_convert(t_binbuf *oldb, int maxtopd) { t_binbuf *newb = binbuf_new(); t_atom *vec = oldb->b_vec; - t_int n = oldb->b_n, nextindex, stackdepth = 0, stack[MAXSTACK], + t_int n = oldb->b_n, nextindex, stackdepth = 0, stack[MAXSTACK] = {0}, nobj = 0, i, gotfontsize = 0; t_atom outmess[MAXSTACK], *nextmess; t_float fontsize = 10; diff --git a/pd/src/m_class.c b/pd/src/m_class.c index 5678a92e3761d9e7eb1dc5c5cf7b6236477d6860..3db693bbb80cc29615b8cb4cc54dc2b9774c337d 100644 --- a/pd/src/m_class.c +++ b/pd/src/m_class.c @@ -404,9 +404,9 @@ void class_addmethod(t_class *c, t_method fn, t_symbol *sel, if (argtype != A_NULL) error("%s_%s: only 5 arguments are typecheckable; use A_GIMME", c->c_name->s_name, sel->s_name); - va_end(ap); m->me_arg[nargs] = A_NULL; } + va_end(ap); return; phooey: bug("class_addmethod: %s_%s: bad argument types\n", diff --git a/pd/src/m_pd.c b/pd/src/m_pd.c index a8811ec49881252ad96ca8303cdce187d2054ab5..4732f7cf8db5c043e7d75e84ef451cf6c42056f1 100644 --- a/pd/src/m_pd.c +++ b/pd/src/m_pd.c @@ -451,6 +451,7 @@ static t_symbol *midi_gensym(const char *prefix, const char *name) char buf[80]; strncpy(buf, prefix, 79); buf[79] = 0; + buf[79] = 0; strncat(buf, name, 79 - strlen(buf)); return (gensym(buf)); } diff --git a/pd/src/s_audio.c b/pd/src/s_audio.c index 14e113ed518cd2777e11d4ba68c595dc0dcf808b..d535928f3a996e83e10d2f585e66dd74312ef97e 100644 --- a/pd/src/s_audio.c +++ b/pd/src/s_audio.c @@ -229,6 +229,15 @@ void sys_set_audio_settings(int naudioindev, int *audioindev, int nchindev, char indevlist[MAXNDEV*DEVDESCSIZE], outdevlist[MAXNDEV*DEVDESCSIZE]; int indevs = 0, outdevs = 0, canmulti = 0, cancallback = 0; + + /* initialize device-arrays */ + for(i=0; i<MAXAUDIOINDEV; i++) + realindev[i] = realinchans[i] = 0; + for(i=0; i<MAXAUDIOOUTDEV; i++) + realoutdev[i] = realoutchans[i] = 0; + for(i=0; i<MAXNDEV*DEVDESCSIZE; i++) + indevlist[i] = outdevlist[i] = 0; + audio_getdevs(indevlist, &indevs, outdevlist, &outdevs, &canmulti, &cancallback, MAXNDEV, DEVDESCSIZE); diff --git a/pd/src/s_audio_alsa.c b/pd/src/s_audio_alsa.c index 06e889cda5fcf6425d7ea5e2cdc04b7c07f16289..4726d004e3087b2faedd0bbbc332dddda0d286de 100644 --- a/pd/src/s_audio_alsa.c +++ b/pd/src/s_audio_alsa.c @@ -617,7 +617,7 @@ int alsa_send_dacs(void) void alsa_printstate( void) { int result, iodev = 0; - snd_pcm_sframes_t indelay, outdelay; + snd_pcm_sframes_t indelay = 0, outdelay = 0; if (sys_audioapi != API_ALSA) { error("restart-audio: implemented for ALSA only."); diff --git a/pd/src/s_inter.c b/pd/src/s_inter.c index 896833d4abc9d6fc06edd3a975fb1f53c51f8718..85e9b3ddb8b1a62c266a1a4d88c590dc93c4a342 100644 --- a/pd/src/s_inter.c +++ b/pd/src/s_inter.c @@ -1135,7 +1135,7 @@ int sys_startgui(const char *guidir) { pid_t childpid; char cmdbuf[4*MAXPDSTRING]; - struct sockaddr_in server; + struct sockaddr_in server = {0}; int len = sizeof(server); int ntry = 0, portno = FIRSTPORTNUM; int xsock = -1; @@ -1195,7 +1195,7 @@ int sys_startgui(const char *guidir) } else if (sys_guisetportnumber) /* GUI exists and sent us a port number */ { - struct sockaddr_in server; + struct sockaddr_in server = {0}; struct hostent *hp; /* create a socket */ sys_guisock = socket(AF_INET, SOCK_STREAM, 0); diff --git a/pd/src/s_path.c b/pd/src/s_path.c index a1ef27921cda67b0ca5d24444b78f95d44a0af35..04ec7aa8caefd2ec64a8d57b38a63428ad0d1d73 100644 --- a/pd/src/s_path.c +++ b/pd/src/s_path.c @@ -660,7 +660,6 @@ int sys_rcfile(void) /* parse the options */ - fclose(file); if (sys_verbose) { if (rcargc) @@ -681,8 +680,10 @@ int sys_rcfile(void) cleanup: /* prevent memleak */ + fclose(file); + for (i = 1; i < NUMARGS-1; i++) - if(rcargv[i])free(rcargv[i]); + if (rcargv[i]) free(rcargv[i]); return(retval); } diff --git a/pd/src/u_pdreceive.c b/pd/src/u_pdreceive.c index 279ce90cdd15cbb6c00b59f5199107e3508ee358..3fbb8f08301514f43ebc547d8cd57b34084e8f5a 100644 --- a/pd/src/u_pdreceive.c +++ b/pd/src/u_pdreceive.c @@ -51,7 +51,7 @@ static void dopoll(void); int main(int argc, char **argv) { int portno; - struct sockaddr_in server; + struct sockaddr_in server = {0}; #ifdef MSW short version = MAKEWORD(2, 0); WSADATA nobby; diff --git a/pd/src/u_pdsend.c b/pd/src/u_pdsend.c index 05090420a23da64249938605ce4af835e117ce4e..57390ca114241070e7399ed8627283b7a53e445f 100644 --- a/pd/src/u_pdsend.c +++ b/pd/src/u_pdsend.c @@ -29,7 +29,7 @@ void x_closesocket(int fd); int main(int argc, char **argv) { int sockfd, portno, protocol; - struct sockaddr_in server; + struct sockaddr_in server = {0}; struct hostent *hp; char *hostname; #if 0