Hi,

some comments on your patch below.

On Fri, Apr 18, 2008 at 16:17:53 +0200, أحمد المحمودي wrote:

> Index: acon-1.0.5/menu.c
> ===================================================================
> --- acon-1.0.5.orig/menu.c    2008-04-18 08:45:45.000000000 +0200
> +++ acon-1.0.5/menu.c 2008-04-18 08:45:48.000000000 +0200
> @@ -55,10 +55,11 @@
>  int drawmenuxy(int vcsa,int x,int y,int xwidth,int ywidth,char **menu,int 
> num)
>  {
>       int i,z,starty=0,select=0;
> -     unsigned char line[400];
> +     unsigned char *line;
>       int ch;
>       int currentconsole;
>  
> +  line=(unsigned char *) malloc(((xwidth*2)+3)*sizeof(unsigned char));

whitespace damage.  also, useless cast, and sizeof(unsigned char) is
always 1.  and you don't check whether malloc() succeeded.
and, where does 'xwidth' come from (are you sure xwidth*2+3 isn't going
to overflow?).

>       currentconsole=getactive();
>  
>       while(1)
> @@ -120,9 +121,11 @@
>                                       break;
>                               case 13:        /*Enter*/
>                               case ' ':
> +          free(line);

whitespace damage again (and again later).

>                                       return select;
>                               case 'r':
>                               case 3:
> +          free(line);
>                                       return -1;
>                       }
>  
> @@ -130,6 +133,7 @@
>                       if(     currentconsole!=getactive())
>                       {
>                               consoleswitched=1;
> +        free(line);
>                               return -1;
>                       }
>  
> @@ -138,6 +142,7 @@
>               if(select>starty+ywidth-1)starty++;
>               if(select<starty)starty--;
>       }
> +  free(line);
>  }
>  
>  char *getfile(int vcsa,char *path)
> @@ -204,7 +209,7 @@
>  
>  char *getuserinput(int vcsa,const char *p,char *str)
>  {
> -     unsigned char line[400];
> +     unsigned char *line;
>       int ypos;
>       int xwidth;
>       int ch,i,startpos;
> @@ -214,6 +219,7 @@
>       str[0]=0;
>       ypos=getmaxy()/2-2;
>       xwidth=getmaxx()-10;
> +  line=(unsigned char *) malloc(((xwidth*2)-2)*sizeof(unsigned char));

same as above.

>       
>       line[0]=0x86;
>       line[1]=COLORN;
> @@ -251,8 +257,10 @@
>                       switch(ch)
>                       {
>                               case 13:        /*Enter*/
> +          free(line);
>                                       return str;
>                               case 3:
> +          free(line);
>                                       return NULL;
>                               case 127:
>                                       if(*str)
> @@ -267,11 +275,13 @@
>                       if(     currentconsole!=getactive())
>                       {
>                               consoleswitched=1;
> +        free(line);
>                               return NULL;
>                       }
>  
>               }while(ch==256);
>       }
> +  free(line);
>  }
>  
>  void options(int vcsa)
> Index: acon-1.0.5/render.c
> ===================================================================
> --- acon-1.0.5.orig/render.c  2008-04-18 08:47:21.000000000 +0200
> +++ acon-1.0.5/render.c       2008-04-18 08:51:29.000000000 +0200
> @@ -112,9 +112,10 @@
>  void processlineLTR(unsigned char *line,int len)
>  {
>       int i,z,loc=0,change=0,tochange=0,locn,tmp,startofline=1;
> -     char buf[400];
> +     char *buf;
>       unsigned char curloc[200];
>       int lang=0;     /*0=english 1=arabic*/
> +  buf=(char *) malloc(sizeof(line));

sizeof(line) is the size of a pointer, that's not going to work.

>  
>       for(i=0;i<len;i+=2)
>       {
> @@ -195,15 +196,18 @@
>                       if(curloc[i]==scrn.x)
>                               {scrn.x=i;break;}
>  
> +  free(buf);
>  }
>  
>  void processlineRTL(unsigned char *line,int len)
>  {
>     int i,z,loc=0,tmp,startofline=1,tochange=0,change=0;
> -   char buf[400];
> +   char *buf;
>     char curloc[200];
>     int lang=1;       /*0=english 1=arabic*/
>  
> +   buf=(char *) malloc(sizeof(line));
> +

see above.

>       for(i=0;i<len;i+=2)
>       {
>               newline[i/2]=isotocp(line[i]);
> @@ -266,6 +270,7 @@
>               for(i=len/2;i>=0;i--)
>                       if(curloc[i]==scrn.x)
>                               {scrn.x=i;break;}
> +   free(buf);
>  }
>  
>  unsigned char lastchr;
> @@ -325,7 +330,7 @@
>  {
>       unsigned int i;
>       static unsigned char oldx=255,oldy;
> -     char line[400];
> +     char *line;
>     
>       lseek(consolevc,0,SEEK_SET);
>       lseek(ttyvc,4,SEEK_SET);
> @@ -335,6 +340,8 @@
>               return 1;
>       }
>               
> +  line=(char *) malloc(((scrn.cols*2)+3)*sizeof(char));
> +
>       line[0]=0,line[scrn.cols*2]=0,line[scrn.cols*2+2]=0;
>       if(oldx==255)oldx=scrn.x,oldy=scrn.y;
>       
> @@ -359,5 +366,6 @@
>       lseek(ttyvc,0,SEEK_SET);
>       write(ttyvc,&scrn,4);
>       oldx=scrn.x,oldy=scrn.y;
> +  free(line);
>       return 0;
>  }

Cheers,
Julien


Reply via email to