summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2008-04-09 05:29:31 +0000
committerZac Medico <zmedico@gentoo.org>2008-04-09 05:29:31 +0000
commit1a0b941b2c80fa569b31a578cbd933b6c0031d09 (patch)
tree38291f96d882eb6687bab3c691beb81941318587
parent8ec5af26b02cdc3613f2545e4c0be4eee158352e (diff)
downloadportage-1a0b941b2c80fa569b31a578cbd933b6c0031d09.tar.gz
portage-1a0b941b2c80fa569b31a578cbd933b6c0031d09.tar.bz2
portage-1a0b941b2c80fa569b31a578cbd933b6c0031d09.zip
Handle issues with newlines in elog messages that can trigger an unhandled
ValueError to be raised from a split() call inside collect_ebuild_messages(): * Use \0 to delimit messages, so that that elog messages containing newlines are handled correctly. * Handle a potential ValueError when splitting the message type. svn path=/main/trunk/; revision=9763
-rwxr-xr-xbin/isolated-functions.sh2
-rw-r--r--pym/portage/elog/messages.py14
2 files changed, 12 insertions, 4 deletions
diff --git a/bin/isolated-functions.sh b/bin/isolated-functions.sh
index 737c5dfb4..6bd33cb29 100755
--- a/bin/isolated-functions.sh
+++ b/bin/isolated-functions.sh
@@ -170,7 +170,7 @@ elog_base() {
return 1
;;
esac
- echo -e "${messagetype} $*" >> "${T}/logging/${EBUILD_PHASE:-other}"
+ echo -ne "${messagetype} $*\n\0" >> "${T}/logging/${EBUILD_PHASE:-other}"
return 0
}
diff --git a/pym/portage/elog/messages.py b/pym/portage/elog/messages.py
index bca63554e..341a61d1f 100644
--- a/pym/portage/elog/messages.py
+++ b/pym/portage/elog/messages.py
@@ -25,16 +25,24 @@ def collect_ebuild_messages(path):
mylogfiles.reverse()
logentries = {}
for msgfunction in mylogfiles:
+ filename = os.path.join(path, msgfunction)
if msgfunction not in EBUILD_PHASES:
- writemsg("!!! can't process invalid log file: %s\n" % f,
+ writemsg("!!! can't process invalid log file: %s\n" % filename,
noiselevel=-1)
continue
if not msgfunction in logentries:
logentries[msgfunction] = []
lastmsgtype = None
msgcontent = []
- for l in open(os.path.join(path, msgfunction), "r").readlines():
- msgtype, msg = l.split(" ", 1)
+ for l in open(filename, "r").read().split("\0"):
+ if not l:
+ continue
+ try:
+ msgtype, msg = l.split(" ", 1)
+ except ValueError:
+ writemsg("!!! malformed entry in " + \
+ "log file: '%s'\n" % filename, noiselevel=-1)
+ continue
if lastmsgtype is None:
lastmsgtype = msgtype
if msgtype == lastmsgtype: