From c5928014c7ab81c7a679c00e88d62651f4d23a16 Mon Sep 17 00:00:00 2001 From: midipix Date: Tue, 19 Apr 2016 20:49:59 -0400 Subject: execution context: avoid '\0' when calculating string buffer size. --- src/logic/slbt_exec_ctx.c | 67 +++++++++++++++++++++++------------------------ 1 file changed, 33 insertions(+), 34 deletions(-) (limited to 'src/logic/slbt_exec_ctx.c') diff --git a/src/logic/slbt_exec_ctx.c b/src/logic/slbt_exec_ctx.c index 754ea4b..4719f04 100644 --- a/src/logic/slbt_exec_ctx.c +++ b/src/logic/slbt_exec_ctx.c @@ -71,17 +71,17 @@ static struct slbt_exec_ctx_impl * slbt_exec_ctx_alloc( csrc = 0; /* clerical [worst-case] buffer size (guard, .libs, version) */ - size = strlen(".lo") + sizeof('\0'); - size += 8 * (strlen(".libs/") + sizeof('\0')); - size += 36 * (strlen(".0000") + sizeof('\0')); + size = strlen(".lo") + 1; + size += 8 * (strlen(".libs/") + 1); + size += 36 * (strlen(".0000") + 1); /* buffer size (cargv, -Wc) */ for (parg=dctx->cctx->cargv; *parg; parg++, argc++) if (!(strncmp("-Wc,",*parg,4))) - size += sizeof('\0') + slbt_parse_comma_separated_flags( - &(*parg)[4],&argc); + size += slbt_parse_comma_separated_flags( + &(*parg)[4],&argc) + 1; else - size += sizeof('\0') + strlen(*parg); + size += strlen(*parg) + 1; /* buffer size (ldirname, lbasename, lobjname, aobjname, etc.) */ if (dctx->cctx->output) @@ -98,14 +98,14 @@ static struct slbt_exec_ctx_impl * slbt_exec_ctx_alloc( /* buffer size (linking) */ if (dctx->cctx->mode == SLBT_MODE_LINK) - size += strlen(dctx->cctx->settings.arprefix) + sizeof('\0') - + strlen(dctx->cctx->settings.arsuffix) + sizeof('\0') - + strlen(dctx->cctx->settings.dsoprefix) + sizeof('\0') - + strlen(dctx->cctx->settings.dsoprefix) + sizeof('\0') - + strlen(dctx->cctx->settings.exeprefix) + sizeof('\0') - + strlen(dctx->cctx->settings.exeprefix) + sizeof('\0') - + strlen(dctx->cctx->settings.impprefix) + sizeof('\0') - + strlen(dctx->cctx->settings.impprefix) + sizeof('\0'); + size += strlen(dctx->cctx->settings.arprefix) + 1 + + strlen(dctx->cctx->settings.arsuffix) + 1 + + strlen(dctx->cctx->settings.dsoprefix) + 1 + + strlen(dctx->cctx->settings.dsoprefix) + 1 + + strlen(dctx->cctx->settings.exeprefix) + 1 + + strlen(dctx->cctx->settings.exeprefix) + 1 + + strlen(dctx->cctx->settings.impprefix) + 1 + + strlen(dctx->cctx->settings.impprefix) + 1; /* alloc */ if (!(args = malloc(size))) @@ -248,7 +248,7 @@ int slbt_get_exec_ctx( ch += sprintf(ch,"%s%s", ictx->ctx.ldirname, ictx->ctx.lbasename) - + sizeof('\0'); + + 1; ictx->ctx.aobjname = ch; @@ -256,14 +256,14 @@ int slbt_get_exec_ctx( ch -= strlen(".libs/"); ch += sprintf(ch,"%s", ictx->ctx.lbasename) - + sizeof('\0'); + + 1; ictx->ctx.ltobjname = ch; strcpy(ch,ictx->ctx.aobjname); if ((mark = strrchr(ch,'.'))) ch = mark + sprintf(mark,"%s",".lo") - + sizeof('\0'); + + 1; } /* linking: arfilename, lafilename, dsofilename */ @@ -274,8 +274,8 @@ int slbt_get_exec_ctx( ictx->ctx.ldirname, dctx->cctx->settings.arprefix, dctx->cctx->libname, - dctx->cctx->settings.arsuffix) - + sizeof('\0'); + dctx->cctx->settings.arsuffix); + ch++; @@ -286,8 +286,8 @@ int slbt_get_exec_ctx( (dctx->cctx->drvflags & SLBT_DRIVER_MODULE) ? "" : dctx->cctx->settings.dsoprefix, - dctx->cctx->libname) - + sizeof('\0'); + dctx->cctx->libname); + ch++; /* dsofilename */ @@ -298,8 +298,8 @@ int slbt_get_exec_ctx( ? "" : dctx->cctx->settings.dsoprefix, dctx->cctx->libname, - dctx->cctx->settings.dsosuffix) - + sizeof('\0'); + dctx->cctx->settings.dsosuffix); + ch++; /* deffilename */ ictx->ctx.deffilename = ch; @@ -307,8 +307,8 @@ int slbt_get_exec_ctx( ictx->ctx.ldirname, dctx->cctx->settings.dsoprefix, dctx->cctx->libname, - dctx->cctx->settings.dsosuffix) - + sizeof('\0'); + dctx->cctx->settings.dsosuffix); + ch++; /* default implib file name */ ictx->ctx.dimpfilename = ch; @@ -316,8 +316,8 @@ int slbt_get_exec_ctx( ictx->ctx.ldirname, dctx->cctx->settings.impprefix, dctx->cctx->libname, - dctx->cctx->settings.impsuffix) - + sizeof('\0'); + dctx->cctx->settings.impsuffix); + ch++; /* primary implib file name */ @@ -327,8 +327,8 @@ int slbt_get_exec_ctx( dctx->cctx->settings.impprefix, dctx->cctx->libname, dctx->cctx->verinfo.major, - dctx->cctx->settings.impsuffix) - + sizeof('\0'); + dctx->cctx->settings.impsuffix); + ch++; /* versioned implib file name */ ictx->ctx.vimpfilename = ch; @@ -339,8 +339,8 @@ int slbt_get_exec_ctx( dctx->cctx->verinfo.major, dctx->cctx->verinfo.minor, dctx->cctx->verinfo.revision, - dctx->cctx->settings.impsuffix) - + sizeof('\0'); + dctx->cctx->settings.impsuffix); + ch++; } /* linking: exefilename */ @@ -351,10 +351,9 @@ int slbt_get_exec_ctx( strcpy(ch,dctx->cctx->output); mark = ch + (slash - dctx->cctx->output); sprintf(++mark,".libs/%s",++slash); - ch += strlen(ch) + sizeof('\0'); + ch += strlen(ch) + 1; } else - ch += sprintf(ch,".libs/%s",dctx->cctx->output) - + sizeof('\0'); + ch += sprintf(ch,".libs/%s",dctx->cctx->output) + 1; } /* argument strings shadow copy */ -- cgit v1.2.3