diff --git a/mingw32-sqlite.spec b/mingw32-sqlite.spec index 855eb4a..421668d 100644 --- a/mingw32-sqlite.spec +++ b/mingw32-sqlite.spec @@ -25,7 +25,7 @@ BuildArch: noarch # Patches from Fedora native package. Patch1: sqlite-3.6.12-libdl.patch # Avoid insecure sprintf(), use a system path for lempar.c, patch from Debian -Patch2: sqlite-3.6.6.2-lemon-snprintf.patch +Patch2: sqlite-3.7.3-lemon-snprintf.patch # Patches for MinGW port. Patch1000: mingw32-sqlite-3.6.12-no-undefined.patch diff --git a/sqlite-3.6.6.2-lemon-snprintf.patch b/sqlite-3.6.6.2-lemon-snprintf.patch deleted file mode 100644 index 299f5e3..0000000 --- a/sqlite-3.6.6.2-lemon-snprintf.patch +++ /dev/null @@ -1,111 +0,0 @@ -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; insymbol; 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; interminal && 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); diff --git a/sqlite-3.7.3-lemon-snprintf.patch b/sqlite-3.7.3-lemon-snprintf.patch new file mode 100644 index 0000000..98e48e3 --- /dev/null +++ b/sqlite-3.7.3-lemon-snprintf.patch @@ -0,0 +1,76 @@ +diff -up sqlite-3.7.3/tool/lemon.c.lemparpath sqlite-3.7.3/tool/lemon.c +--- sqlite-3.7.3/tool/lemon.c.lemparpath 2008-12-05 20:37:49.000000000 +0200 ++++ sqlite-3.7.3/tool/lemon.c 2008-12-05 20:44:08.000000000 +0200 +@@ -2363,7 +2363,7 @@ + for(z=psp->filename, nBack=0; *z; z++){ + if( *z=='\\' ) nBack++; + } +- sprintf(zLine, "#line %d ", psp->tokenlineno); ++ snprintf(zLine, sizeof zLine, "#line %d ", psp->tokenlineno); + nLine = lemonStrlen(zLine); + n += nLine + lemonStrlen(psp->filename) + nBack; + } +@@ -2947,7 +2947,7 @@ + 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," "); +@@ -3118,14 +3118,16 @@ + + 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); + } +@@ -3137,7 +3139,7 @@ + } + 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; + } +@@ -3271,7 +3273,7 @@ + while( n-- > 0 ){ + c = *(zText++); + if( c=='%' && n>0 && zText[0]=='d' ){ +- sprintf(zInt, "%d", p1); ++ snprintf(zInt, sizeof zInt, "%d", p1); + p1 = p2; + strcpy(&z[used], zInt); + used += lemonStrlen(&z[used]); +@@ -3883,7 +3885,7 @@ + /* Generate a table containing the symbolic name of every symbol + */ + for(i=0; insymbol; 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++; } + } +@@ -4049,7 +4051,7 @@ + in = file_open(lemp,".h","rb"); + if( in ){ + for(i=1; interminal && 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);