Remove size limit when expanding macros
This removes a seemingly undocumented, and not even well defined, limit on the size of a macro expansion when parsing a spec file. [lkardos@redhat.com: created new funtion expandMacrosU() (Unlimited) instead of modifying expandMacros() in order not to change API/ABI] Signed-off-by: Lubos Kardos <lkardos@redhat.com>
This commit is contained in:
parent
36a681d107
commit
61838b0fda
|
@ -1631,11 +1631,13 @@ static rpmRC readFilesManifest(rpmSpec spec, Package pkg, const char *path)
|
|||
while (fgets(buf, sizeof(buf), fd)) {
|
||||
if (handleComments(buf))
|
||||
continue;
|
||||
if (expandMacros(spec, spec->macros, buf, sizeof(buf))) {
|
||||
char *expanded = expandMacrosU(spec, spec->macros, buf);
|
||||
if (expanded == NULL) {
|
||||
rpmlog(RPMLOG_ERR, _("line: %s\n"), buf);
|
||||
goto exit;
|
||||
}
|
||||
argvAdd(&(pkg->fileList), buf);
|
||||
argvAdd(&(pkg->fileList), expanded);
|
||||
free(expanded);
|
||||
nlines++;
|
||||
}
|
||||
|
||||
|
|
|
@ -132,11 +132,13 @@ static rpmRC addFileToTag(rpmSpec spec, const char * file,
|
|||
}
|
||||
|
||||
while (fgets(buf, sizeof(buf), f)) {
|
||||
if (expandMacros(spec, spec->macros, buf, sizeof(buf))) {
|
||||
char *expanded = expandMacrosU(spec, spec->macros, buf);
|
||||
if (expanded == NULL) {
|
||||
rpmlog(RPMLOG_ERR, _("%s: line: %s\n"), fn, buf);
|
||||
goto exit;
|
||||
}
|
||||
appendStringBuf(sb, buf);
|
||||
appendStringBuf(sb, expanded);
|
||||
free(expanded);
|
||||
}
|
||||
headerPutString(h, tag, getStringBuf(sb));
|
||||
rc = RPMRC_OK;
|
||||
|
|
|
@ -180,13 +180,15 @@ static int expandMacrosInSpecBuf(rpmSpec spec, int strip)
|
|||
if (lbuf[0] == '#')
|
||||
isComment = 1;
|
||||
|
||||
lbuf = xstrdup(spec->lbuf);
|
||||
lbuf = spec->lbuf;
|
||||
|
||||
rc = expandMacros(spec, spec->macros, spec->lbuf, spec->lbufSize);
|
||||
if (rc) {
|
||||
spec->lbuf = expandMacrosU(spec, spec->macros, lbuf);
|
||||
if (spec->lbuf == NULL) {
|
||||
rpmlog(RPMLOG_ERR, _("line %d: %s\n"),
|
||||
spec->lineNum, spec->lbuf);
|
||||
spec->lineNum, lbuf);
|
||||
goto exit;
|
||||
} else {
|
||||
spec->lbufSize = strlen(spec->lbuf) + 1;
|
||||
}
|
||||
|
||||
if (strip & STRIP_COMMENTS && isComment) {
|
||||
|
|
|
@ -1471,6 +1471,23 @@ int expandMacros(void * spec, rpmMacroContext mc, char * sbuf, size_t slen)
|
|||
return rc;
|
||||
}
|
||||
|
||||
char *expandMacrosU(void * spec, rpmMacroContext mc, char * sbuf)
|
||||
{
|
||||
char *target = NULL;
|
||||
int rc;
|
||||
|
||||
mc = rpmmctxAcquire(mc);
|
||||
rc = doExpandMacros(mc, sbuf, &target);
|
||||
rpmmctxRelease(mc);
|
||||
|
||||
if (rc) {
|
||||
free(target);
|
||||
target = NULL;
|
||||
}
|
||||
|
||||
return target;
|
||||
}
|
||||
|
||||
void
|
||||
rpmDumpMacroTable(rpmMacroContext mc, FILE * fp)
|
||||
{
|
||||
|
|
|
@ -65,6 +65,18 @@ int expandMacros (void * spec, rpmMacroContext mc,
|
|||
char * sbuf,
|
||||
size_t slen);
|
||||
|
||||
/** \ingroup rpmmacro
|
||||
* Expand macro into buffer.
|
||||
* @deprecated Use rpmExpand().
|
||||
* @todo Eliminate from API.
|
||||
* @param spec cookie (unused)
|
||||
* @param mc macro context (NULL uses global context).
|
||||
* @retval sbuf input macro to expand
|
||||
* @return macro expansion (malloc'ed) or NULL on failure
|
||||
*/
|
||||
char *expandMacrosU (void * spec, rpmMacroContext mc,
|
||||
char * sbuf);
|
||||
|
||||
/** \ingroup rpmmacro
|
||||
* Add macro to context.
|
||||
* @deprecated Use rpmDefineMacro().
|
||||
|
|
Loading…
Reference in New Issue