* Tue Dec 16 2008 Richard Jones <rjones@redhat.com> - 3.6.6.2-1
[fedora-mingw.git] / sqlite / sqlite-3.6.6.2-lemon-snprintf.patch
diff --git a/sqlite/sqlite-3.6.6.2-lemon-snprintf.patch b/sqlite/sqlite-3.6.6.2-lemon-snprintf.patch
new file mode 100644 (file)
index 0000000..299f5e3
--- /dev/null
@@ -0,0 +1,111 @@
+diff -up sqlite-3.6.6.2/tool/lemon.c.lemparpath sqlite-3.6.6.2/tool/lemon.c
+--- sqlite-3.6.6.2/tool/lemon.c.lemparpath     2008-12-05 20:37:49.000000000 +0200
++++ sqlite-3.6.6.2/tool/lemon.c        2008-12-05 20:44:08.000000000 +0200
+@@ -1324,15 +1324,15 @@ void ErrorMsg(const char *filename, int 
+   va_start(ap, format);
+   /* Prepare a prefix to be prepended to every output line */
+   if( lineno>0 ){
+-    sprintf(prefix,"%.*s:%d: ",PREFIXLIMIT-10,filename,lineno);
++    snprintf(prefix,sizeof prefix,"%.*s:%d: ",PREFIXLIMIT-10,filename,lineno);
+   }else{
+-    sprintf(prefix,"%.*s: ",PREFIXLIMIT-10,filename);
++    snprintf(prefix,sizeof prefix,"%.*s: ",PREFIXLIMIT-10,filename);
+   }
+   prefixsize = lemonStrlen(prefix);
+   availablewidth = LINEWIDTH - prefixsize;
+   /* Generate the error message */
+-  vsprintf(errmsg,format,ap);
++  vsnprintf(errmsg,sizeof errmsg,format,ap);
+   va_end(ap);
+   errmsgsize = lemonStrlen(errmsg);
+   /* Remove trailing '\n's from the error message. */
+@@ -2911,7 +2911,7 @@ struct lemon *lemp;
+     while( cfp ){
+       char buf[20];
+       if( cfp->dot==cfp->rp->nrhs ){
+-        sprintf(buf,"(%d)",cfp->rp->index);
++        snprintf(buf,sizeof buf,"(%d)",cfp->rp->index);
+         fprintf(fp,"    %5s ",buf);
+       }else{
+         fprintf(fp,"          ");
+@@ -2966,6 +2966,7 @@ int modemask;
+ {
+   char *pathlist;
+   char *path,*cp;
++  size_t pathsz;
+   char c;
+ #ifdef __WIN32__
+@@ -2976,21 +2977,21 @@ int modemask;
+   if( cp ){
+     c = *cp;
+     *cp = 0;
+-    path = (char *)malloc( lemonStrlen(argv0) + lemonStrlen(name) + 2 );
+-    if( path ) sprintf(path,"%s/%s",argv0,name);
++    path = (char *)malloc((pathsz=lemonStrlen(argv0) + lemonStrlen(name) + 2));
++    if( path ) snprintf(path,pathsz,"%s/%s",argv0,name);
+     *cp = c;
+   }else{
+     extern char *getenv();
+     pathlist = getenv("PATH");
+     if( pathlist==0 ) pathlist = ".:/bin:/usr/bin";
+-    path = (char *)malloc( lemonStrlen(pathlist)+lemonStrlen(name)+2 );
++    path = (char *)malloc((pathsz=lemonStrlen(pathlist)+lemonStrlen(name)+2));
+     if( path!=0 ){
+       while( *pathlist ){
+         cp = strchr(pathlist,':');
+         if( cp==0 ) cp = &pathlist[lemonStrlen(pathlist)];
+         c = *cp;
+         *cp = 0;
+-        sprintf(path,"%s/%s",pathlist,name);
++        snprintf(path,pathsz,"%s/%s",pathlist,name);
+         *cp = c;
+         if( c==0 ) pathlist = "";
+         else pathlist = &cp[1];
+@@ -3070,14 +3071,16 @@ struct lemon *lemp;
+   cp = strrchr(lemp->filename,'.');
+   if( cp ){
+-    sprintf(buf,"%.*s.lt",(int)(cp-lemp->filename),lemp->filename);
++    snprintf(buf,sizeof buf,"%.*s.lt",(int)(cp-lemp->filename),lemp->filename);
+   }else{
+-    sprintf(buf,"%s.lt",lemp->filename);
++    snprintf(buf,sizeof buf,"%s.lt",lemp->filename);
+   }
+   if( access(buf,004)==0 ){
+     tpltname = buf;
+   }else if( access(templatename,004)==0 ){
+     tpltname = templatename;
++  }else if( access("/usr/share/lemon/lempar.c",004)==0 ){
++    tpltname = "/usr/share/lemon/lempar.c";
+   }else{
+     tpltname = pathsearch(lemp->argv0,templatename,0);
+   }
+@@ -3089,7 +3092,7 @@ struct lemon *lemp;
+   }
+   in = fopen(tpltname,"rb");
+   if( in==0 ){
+-    fprintf(stderr,"Can't open the template file \"%s\".\n",templatename);
++    fprintf(stderr,"Can't open the template file \"%s\".\n",tpltname);
+     lemp->errorcnt++;
+     return 0;
+   }
+@@ -3827,7 +3830,7 @@ int mhflag;     /* Output in makeheaders
+   /* Generate a table containing the symbolic name of every symbol
+   */
+   for(i=0; i<lemp->nsymbol; i++){
+-    sprintf(line,"\"%s\",",lemp->symbols[i]->name);
++    snprintf(line,sizeof line,"\"%s\",",lemp->symbols[i]->name);
+     fprintf(out,"  %-15s",line);
+     if( (i&3)==3 ){ fprintf(out,"\n"); lineno++; }
+   }
+@@ -3983,7 +3986,7 @@ struct lemon *lemp;
+   in = file_open(lemp,".h","rb");
+   if( in ){
+     for(i=1; i<lemp->nterminal && fgets(line,LINESIZE,in); i++){
+-      sprintf(pattern,"#define %s%-30s %2d\n",prefix,lemp->symbols[i]->name,i);
++      snprintf(pattern,sizeof pattern,"#define %s%-30s %2d\n",prefix,lemp->symbols[i]->name,i);
+       if( strcmp(line,pattern) ) break;
+     }
+     fclose(in);