Bug fix: Paths with symbolic links preceding ".." were not interpreted properly

This commit is contained in:
2014-02-10 10:49:59 +00:00
parent 798330527b
commit e770a4369d
5 changed files with 51 additions and 8 deletions

View File

@ -35,9 +35,10 @@
/* @param flag bit0= simple readlink(): no normalization, no multi-hop
bit1= this is potentially a recursion
*/
int Xorriso_resolve_link(struct XorrisO *xorriso,
char *link_path, char result_path[SfileadrL], int flag)
int Xorriso_resolve_link(struct XorrisO *xorriso, char *link_path,
char result_path[SfileadrL], int flag)
{
ssize_t l;
struct stat stbuf;
@ -45,6 +46,19 @@ int Xorriso_resolve_link(struct XorrisO *xorriso,
char *buf= NULL, *dirbuf= NULL, *lpt, *spt;
static int link_limit= 100;
if(flag & 1) {
xorriso->resolve_link_rec_count++;
if(xorriso->resolve_link_rec_count > xorriso->resolve_link_rec_limit) {
Xorriso_msgs_submit(xorriso, 0, link_path, 0, "ERRFILE", 0);
sprintf(xorriso->info_text, "Too many link recursions before : ");
Text_shellsafe(link_path, xorriso->info_text, 1);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, show_errno,
"FAILURE", 0);
{ret= 0; goto ex;}
}
} else
xorriso->resolve_link_rec_count= 0;
Xorriso_alloc_meM(buf, char, SfileadrL);
Xorriso_alloc_meM(dirbuf, char, SfileadrL);
@ -99,8 +113,9 @@ handle_abort:;
break;
}
ret= Xorriso_normalize_img_path(xorriso, dirbuf, buf, result_path, 2|4);
if(ret<=0)
if(ret<=0) {
goto ex;
}
if(lstat(result_path, &stbuf)==-1) {
lpt= result_path;
@ -125,6 +140,8 @@ too_many_hops:;
ex:;
Xorriso_free_meM(buf);
Xorriso_free_meM(dirbuf);
if(xorriso->resolve_link_rec_count > 0)
xorriso->resolve_link_rec_count--;
return(ret);
}
@ -806,7 +823,7 @@ int Xorriso_lsx_filev(struct XorrisO *xorriso, char *wd,
/* Count valid nodes, warn of invalid ones */
for(i= 0; i<filec; i++) {
ret= Xorriso_make_abs_adr(xorriso, wd, filev[i], path, 1|2|4);
ret= Xorriso_make_abs_adr(xorriso, wd, filev[i], path, 1|2|4|8);
if(ret<=0) {
was_error++;
continue;