Tanguy LE CARROUR, le Fri 03 Feb 2012 14:51:05 +0100, a écrit :
> TODO: do I have to report an error if malloc() or lstat() fails?

See the code around whether it usually does it.

> --- old/sakura-2.4.2/src/sakura.c     2012-02-03 14:18:51.789612191 +0100
> +++ sakura-2.4.2/src/sakura.c 2012-02-03 14:34:26.000000000 +0100
> @@ -1378,17 +1378,33 @@
>  
>       if (term->pid >= 0) {
>               char *file;
> -             char buf[PATH_MAX+1];
> +             char *buf = NULL;
> +             struct stat sb;
>               int len;
>  
> +             if (lstat(file, &sb) == -1) {
> +                     /* TODO: report error? */
> +                     return cwd;

Keep the same behavior as before the patch: originally readlink would
fail and cwd just not be set. Do the same.

> +             }
> +             buf = malloc(sb.st_size + 1);
> +             if (buf == NULL) {
> +                     /* TODO: report error? */
> +                     return cwd;
> +             }
>               file = g_strdup_printf ("/proc/%d/cwd", term->pid);
> -             len = readlink (file, buf, sizeof (buf) - 1);

So upstream code does not check for g_strdup_printf failure to allocate
room, so don't bother with checking the result of malloc().

> +             len = readlink (file, buf, sb.st_size + 1);
>  
> +             if (len < 0 || len > sb.st_size) {
> +                     /* TODO: report error? */
> +                     g_free(buf);
> +                     return cwd;
> +             }
>               if (len > 0 && buf[0] == '/') {
>                       buf[len] = '\0';
>                       cwd = g_strdup(buf);
>               }
>  
> +             g_free(buf);
>               g_free(file);
>       }
>  


-- 
To UNSUBSCRIBE, email to [email protected]
with a subject of "unsubscribe". Trouble? Contact [email protected]
Archive: http://lists.debian.org/[email protected]

Reply via email to