Index: ddxList.c =================================================================== RCS file: /cvs/xorg/xc/programs/Xserver/xkb/ddxList.c,v retrieving revision 1.4 diff -u -r1.4 ddxList.c --- ddxList.c 9 Jan 2005 17:35:47 -0000 1.4 +++ ddxList.c 9 Jan 2005 18:00:26 -0000 @@ -131,7 +131,7 @@ XkbSrvListInfoPtr list, ClientPtr client) { -char *file,*map,*tmp,buf[PATH_MAX*4]; +char *file,*map,*tmp,*buf=NULL; FILE *in; Status status; int rval; @@ -162,19 +162,15 @@ (void) mktemp(tmpname); #endif if (XkbBaseDirectory!=NULL) { - if (strlen(XkbBaseDirectory)+strlen(componentDirs[what])+6 > PATH_MAX) - return BadImplementation; if ((list->pattern[what][0]=='*')&&(list->pattern[what][1]=='\0')) { - sprintf(buf,"%s/%s.dir",XkbBaseDirectory,componentDirs[what]); + buf = Xprintf("%s/%s.dir",XkbBaseDirectory,componentDirs[what]); in= fopen(buf,"r"); + xfree (buf); + buf = NULL; } if (!in) { haveDir= False; - if (strlen(XkbBaseDirectory)*2+strlen(componentDirs[what]) - +W32_tmplen - +(xkbDebugFlags>9?2:1)+strlen(file)+35 > PATH_MAX) - return BadImplementation; - sprintf(buf, + buf = Xprintf( "'%s/xkbcomp' '-R%s/%s' -w %ld -l -vlfhpR '%s'" W32_tmparg, XkbBaseDirectory,XkbBaseDirectory,componentDirs[what],(long) ((xkbDebugFlags<2)?1:((xkbDebugFlags>10)?10:xkbDebugFlags)), @@ -183,18 +179,15 @@ } } else { - if (strlen(XkbBaseDirectory)+strlen(componentDirs[what])+6 > PATH_MAX) - return BadImplementation; if ((list->pattern[what][0]=='*')&&(list->pattern[what][1]=='\0')) { - sprintf(buf,"%s.dir",componentDirs[what]); + buf = Xprintf("%s.dir",componentDirs[what]); in= fopen(buf,"r"); + xfree (buf); + buf = NULL; } if (!in) { haveDir= False; - if (strlen(componentDirs[what]) + W32_tmplen - +(xkbDebugFlags>9?2:1)+strlen(file)+29 > PATH_MAX) - return BadImplementation; - sprintf(buf, + buf = Xprintf( "xkbcomp -R%s -w %ld -l -vlfhpR '%s'" W32_tmparg, componentDirs[what],(long) ((xkbDebugFlags<2)?1:((xkbDebugFlags>10)?10:xkbDebugFlags)), @@ -218,7 +211,14 @@ #endif } if (!in) + { + if (buf != NULL) + xfree (buf); +#ifdef WIN32 + unlink(tmpname); +#endif return BadImplementation; + } list->nFound[what]= 0; while ((status==Success)&&((tmp=fgets(buf,PATH_MAX,in))!=NULL)) { unsigned flags; @@ -272,6 +272,8 @@ fclose(in); unlink(tmpname); #endif + if (buf != NULL) + xfree (buf); return status; } Index: ddxLoad.c =================================================================== RCS file: /cvs/xorg/xc/programs/Xserver/xkb/ddxLoad.c,v retrieving revision 1.9 diff -u -r1.9 ddxLoad.c --- ddxLoad.c 9 Jan 2005 17:35:47 -0000 1.9 +++ ddxLoad.c 9 Jan 2005 18:00:27 -0000 @@ -193,7 +193,7 @@ char * nameRtrn, int nameRtrnLen) { -char cmd[PATH_MAX*4],file[PATH_MAX],xkm_output_dir[PATH_MAX],*map,*outFile; +char *cmd = NULL,file[PATH_MAX],xkm_output_dir[PATH_MAX],*map,*outFile; if (names->keymap==NULL) return False; @@ -225,17 +225,7 @@ if (xkbbasedir[i]=='/') xkbbasedir[i]='\\'; #endif - if (strlen(xkbbasedir)*2+(xkbDebugFlags>9?2:1) - +(map?strlen(map)+3:0)+strlen(PRE_ERROR_MSG) - +strlen(ERROR_PREFIX)+strlen(POST_ERROR_MSG1) - +strlen(file)+strlen(xkm_output_dir) - +strlen(outFile)+59 > PATH_MAX) - { - ErrorF("compiler command for keymap (%s) exceeds max length\n", - names->keymap); - return False; - } - sprintf(cmd,"\"%s" PATHSEPARATOR "xkbcomp\" -w %d \"-R%s\" -xkm %s%s -em1 %s -emp %s -eml %s keymap/%s \"%s%s.xkm\"", + cmd = Xprintf("\"%s" PATHSEPARATOR "xkbcomp\" -w %d \"-R%s\" -xkm %s%s -em1 %s -emp %s -eml %s keymap/%s \"%s%s.xkm\"", xkbbasedir, ((xkbDebugFlags<2)?1:((xkbDebugFlags>10)?10:(int)xkbDebugFlags)), xkbbasedir,(map?"-m ":""),(map?map:""), @@ -243,16 +233,7 @@ xkm_output_dir,outFile); } else { - if ((xkbDebugFlags>9?2:1)+(map?strlen(map)+3:0)+strlen(PRE_ERROR_MSG) - +strlen(ERROR_PREFIX)+strlen(POST_ERROR_MSG1) - +strlen(file)+strlen(xkm_output_dir) - +strlen(outFile)+51 > PATH_MAX) - { - ErrorF("compiler command for keymap (%s) exceeds max length\n", - names->keymap); - return False; - } - sprintf(cmd,"xkbcomp -w %d -xkm %s%s -em1 %s -emp %s -eml %s keymap/%s \"%s%s.xkm\"", + cmd = Xprintf("xkbcomp -w %d -xkm %s%s -em1 %s -emp %s -eml %s keymap/%s \"%s%s.xkm\"", ((xkbDebugFlags<2)?1:((xkbDebugFlags>10)?10:(int)xkbDebugFlags)), (map?"-m ":""),(map?map:""), PRE_ERROR_MSG,ERROR_PREFIX,POST_ERROR_MSG1,file, @@ -274,6 +255,8 @@ } if (outFile!=NULL) _XkbFree(outFile); + if (cmd!=NULL) + xfree(cmd); return True; } #ifdef DEBUG @@ -281,6 +264,8 @@ #endif if (outFile!=NULL) _XkbFree(outFile); + if (cmd!=NULL) + xfree(cmd); return False; } @@ -293,7 +278,8 @@ int nameRtrnLen) { FILE * out; -char buf[PATH_MAX*4],keymap[PATH_MAX],xkm_output_dir[PATH_MAX]; +char *buf = NULL, keymap[PATH_MAX],xkm_output_dir[PATH_MAX]; + #ifdef WIN32 char tmpname[PATH_MAX]; #endif @@ -332,17 +318,7 @@ if (xkbbasedir[i]=='/') xkbbasedir[i]='\\'; #endif - if (strlen(xkbbasedir)*2+(xkbDebugFlags>9?2:1) - +strlen(PRE_ERROR_MSG)+strlen(ERROR_PREFIX) - +strlen(POST_ERROR_MSG1)+strlen(xkm_output_dir) - +strlen(xkmfile) - +strlen(keymap)+53 > PATH_MAX) - { - ErrorF("compiler command for keymap (%s) exceeds max length\n", - names->keymap); - return False; - } - sprintf(buf, + buf = Xprintf( "\"%s" PATHSEPARATOR "xkbcomp\" -w %d \"-R%s\" -xkm \"%s\" -em1 %s -emp %s -eml %s \"%s%s.xkm\"", xkbbasedir, ((xkbDebugFlags<2)?1:((xkbDebugFlags>10)?10:(int)xkbDebugFlags)), @@ -356,16 +332,7 @@ #else char *xkmfile = tmpname; #endif - if ((xkbDebugFlags>9?2:1)+strlen(PRE_ERROR_MSG) - +strlen(ERROR_PREFIX)+strlen(POST_ERROR_MSG1) - +strlen(xkmfile) - +strlen(xkm_output_dir)+strlen(keymap)+45 > PATH_MAX) - { - ErrorF("compiler command for keymap (%s) exceeds max length\n", - names->keymap); - return False; - } - sprintf(buf, + buf = Xprintf( "xkbcomp -w %d -xkm \"%s\" -em1 %s -emp %s -eml %s \"%s%s.xkm\"", ((xkbDebugFlags<2)?1:((xkbDebugFlags>10)?10:(int)xkbDebugFlags)), xkmfile, @@ -427,6 +394,8 @@ #endif } #endif + if (buf != NULL) + xfree (buf); return True; } #ifdef DEBUG @@ -449,6 +418,8 @@ #endif if (nameRtrn) nameRtrn[0]= '\0'; + if (buf != NULL) + xfree (buf); return False; }