RPM

debugedit prints: canonicalization unexpectedly shrank by one character

Bug #638633 reported by Jeff Johnson
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
RPM
Won't Fix
Medium
Jeff Johnson
CentOS
Fix Released
Medium
Fedora
Fix Released
Medium
Mandriva
Unknown
High

Bug Description

tracker

Revision history for this message
In , Jack (jack-redhat-bugs) wrote :
Download full text (6.4 KiB)

Looks like the new rpm 4.4.2.3-9.el5 package brings this bug to RHEL 5.3. This is proving to be quite serious.

+++ This bug was initially created as a clone of Bug #304121 +++

Description of problem:
When a the source directory for a file ends with a '/', debugedit can spit out a
"canonicalization unexpectedly shrank by one character" error and fail. That's
not really enough for most people to figure out what's gone wrong or how to fix it.

Version-Release number of selected component (if applicable):
rpm-build-4.4.2.2-0.5.rc2

How reproducible:
Always

Steps to Reproduce:
1. mkdir src
2. cat > src/foo.c <<- EOF
   int
   main(int argc, char **argv)
   {
        return 0;
   }
EOF
3. cd src
4. gcc -g3 -o foo ../src//foo.c
5. /usr/lib/rpm/debugedit -b `pwd` -d / foo

Actual results:
/usr/lib/rpm/debugedit: canonicalization unexpectedly shrank by one character

Expected results:
Either not fail, or indicate that a directory name in the table ended with a
'/', which it probably shouldn't have contained.

Additional info:
I actually ran into this with openafs 1.4.4, but I'm including a smaller
reproducer which I think triggers the same bug.

--- Additional comment from <email address hidden> on 2007-09-27 04:49:46 EDT ---

Hmm, it's not the trailing '/' that troubles debugedit per se but the fact that
the canonicalized path is exactly one character shorter than the original which
is a case that it can't (and can't be made to AFAICT) handle. Roland, care to
comment?

The error message could certainly be clearer on what sort of problem to look for
(basically single extra '/' somewhere in the path).

--- Additional comment from <email address hidden> on 2007-09-27 19:26:18 EDT ---

Indeed, the format makes it impossible to do rewriting in place unless the table
shrinks by at least 2 or not at all (it's beyond the scope of debugedit to
resize things). For cases in the directory table you could do an ugly kludge by
repeating the leading / or adding a trailing one to preserve the size. But
there is no trick like that to do in the file table, where any leading or
trailing slash would change the final file name so it doesn't work (not just is
wrongly ugly). The !=-1 size restriction is for the whole table cumulatively,
so with extra slashes removed by canonicalization, it is only a problem when
there is only one such file name. It could do a kludge of adding a trailing
slash to some dir table entry when this arises, which would work and only uglify
some of the names to /foo//bar. Still, I suspect packagers will be OK with it
being an error they have to fix or work around, if they can tell what to do.

The error message you get now is certainly pretty arcane. The other error of
the same ilk has a better message.

Looking at canonicalize_path, I think it is true that a doubled / is the only
way it could shrink by exactly one. But I could use a second set of eyes to
verify there really is no obscure innocent case that could do that. If that's
true, then we can simply change the error message to identify this problem.

--- Additional comment from <email address hidden> on 2007-11-14 05:53:44 EDT ---

FYI, the instance that triggers this bug has apparently ...

Read more...

Revision history for this message
In , Olivier (olivier-redhat-bugs) wrote :

Created attachment 333735
Proposed patch to restore old behavior

The behavior of "debugedit" has not changed, it was already reporting an error in previous updates of EL5.

However, with rpm-4.4.2.3 the script "find-debuginfo.sh" now stops if an error is reported by "debugedit", whereas it used to continue with the previous version rpm-4.4.2-48 that was shipping in Red hat Enterprise Linux up to 5.2.

As a result, some rpm that used to build with EL5.2 now fail in EL5.3. While the error is most likely in the source of the package itself, this is a change in behavior that is perceived as a regression ("it used to build, but not anymore").

The following (trivial) patch does not address the issue with debugedit, it just restores the old behavior so the script find-debuginfo.sh will not stop if "debugedit" fails, as it used to do up to EL 5.2.

Would that be acceptable for EL5.x?

Revision history for this message
In , Jack (jack-redhat-bugs) wrote :

I think that would be acceptable for 5.x.

Revision history for this message
In , RHEL (rhel-redhat-bugs) wrote :

This bugzilla has Keywords: Regression.

Since no regressions are allowed between releases,
it is also being proposed as a blocker for this release.

Please resolve ASAP.

Revision history for this message
In , Olivier (olivier-redhat-bugs) wrote :

Created attachment 335710
Patch to add a mention in the rpmbuild.8 man page

This additional patch just adds the mention of the issue to the rpmbuild man page (the added text in English may need proof reading).

Please note that this patch does not include the other localized versions of the man page for rpmbuild (ie Polish and Japanese).

Revision history for this message
In , Olivier (olivier-redhat-bugs) wrote :

Created attachment 336443
Patch to add a mention in the rpmbuild.8 man page (now also including ja/rpmbuild.8 )

Updated patch including Japanese translation from <email address hidden>

Just for clarity, either these two patches:

 - rpm-4.4.2.3-do-not-break-on-debugedit.patch
 - rpm-4.4.2.3-do-not-break-on-debugedit-man-part2.patch

Or only this one:

 - rpm-4.4.2.3-canon-fix.patch

Should be applied. The first two patches restore the previous behavior and document the error in the man page, whereas the latter addresses the issue in debugedit.

Revision history for this message
In , Olivier (olivier-redhat-bugs) wrote :

Comment on attachment 336254
Patch to address the error in debugedit

Patch from http://laiskiainen.org/tmp/debugedit-canon-fix.diff (slightly adapted)

Revision history for this message
In , errata-xmlrpc (errata-xmlrpc-redhat-bugs) wrote :

An advisory has been issued which should help the problem
described in this bug report. This report is therefore being
closed with a resolution of ERRATA. For more information
on therefore solution and/or where to find the updated files,
please follow the link below. You may reopen this bug report
if the solution does not work for you.

http://rhn.redhat.com/errata/RHBA-2009-1371.html

Jeff Johnson (n3npq)
tags: added: debugedit fedora
Revision history for this message
Jeff Johnson (n3npq) wrote :

Also reported from ROSA here:
    http://lists.mandriva.com/cooker/2011-12/msg00331.php

The root cause is utterly banal:
    A path that is canonicalised by debugedit.c has a doubled '/' character.

Finding which path is a rather complex task however.

Revision history for this message
Jeff Johnson (n3npq) wrote :
Changed in rpm:
status: New → Confirmed
importance: Undecided → Medium
Changed in mandriva:
importance: Unknown → High
Jeff Johnson (n3npq)
Changed in rpm:
status: Confirmed → Won't Fix
assignee: nobody → Jeff Johnson (n3npq)
Changed in fedora:
importance: Unknown → Medium
status: Unknown → Fix Released
Changed in centos:
importance: Unknown → Medium
status: Unknown → Fix Released
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Related blueprints

Remote bug watches

Bug watches keep track of this bug in other bug trackers.