2006-07-17 Richard Guenther * jartool.c (extract_jar): Do not allow directory traversal to parents of the extraction root. --- fastjar/jartool.c.jj 2006-07-11 10:53:39.000000000 +0200 +++ fastjar/jartool.c 2006-07-18 13:49:39.000000000 +0200 @@ -1736,6 +1736,7 @@ int extract_jar(int fd, char **files, in const ub1 *start = filename; char *tmp_buff; struct stat sbuf; + int depth = 0; tmp_buff = malloc(sizeof(char) * strlen((const char *)filename)); @@ -1756,7 +1757,14 @@ int extract_jar(int fd, char **files, in #ifdef DEBUG printf("checking the existance of %s\n", tmp_buff); #endif - + if(strcmp(tmp_buff, "..") == 0){ + --depth; + if (depth < 0){ + fprintf(stderr, "Traversal to parent directories during unpacking!\n"); + exit(1); + } + } else if (strcmp(tmp_buff, ".") != 0) + ++depth; if(stat(tmp_buff, &sbuf) < 0){ if(errno != ENOENT){ perror("stat");