commit:     b4cf6bfdc8ad3908637f5ab068f6c323bb32fe6b
Author:     Ulrich Müller <ulm <AT> gentoo <DOT> org>
AuthorDate: Mon Dec 25 09:40:26 2017 +0000
Commit:     Ulrich Müller <ulm <AT> gentoo <DOT> org>
CommitDate: Mon Dec 25 09:40:26 2017 +0000
URL:        https://gitweb.gentoo.org/proj/eselect.git/commit/?id=b4cf6bfd

Check for valid news item format.

* modules/news.eselect (do_list): Check for valid news item format.

 ChangeLog            |  2 ++
 modules/news.eselect | 30 ++++++++++++++++++++----------
 2 files changed, 22 insertions(+), 10 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 648e874..55e5bb4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,7 @@
 2017-12-25  Ulrich Müller  <[email protected]>
 
+       * modules/news.eselect (do_list): Check for valid news item format.
+
        * libs/core.bash.in (eval): Make it fatal again, after more than
        one year of transition time.
 

diff --git a/modules/news.eselect b/modules/news.eselect
index 15cf985..b0e9695 100644
--- a/modules/news.eselect
+++ b/modules/news.eselect
@@ -172,7 +172,7 @@ describe_list() {
 }
 
 do_list() {
-       local item stat repo dir header line title posted i=1
+       local item stat repo dir header line format title posted i=1
        local cols=${COLUMNS:-80} ifs_save=${IFS}
        local -a repos dirs
 
@@ -185,16 +185,26 @@ do_list() {
                title="(${item} - no title)"
                posted=${item:0:10}
                [[ ${posted} == +([0-9])-+([0-9])-+([0-9]) ]] || posted="(no 
date) "
-               header=$(read_item "${dir}" "${item}" header) \
-                       || title="(${item} - removed?)"
-               local IFS=$'\n'
-               for line in ${header}; do
-                       case "${line%%:*}" in
-                               Title) title=${line##*([^:]):*([[:space:]])} ;;
-                               Posted) posted=${line##*([^:]):*([[:space:]])} 
;;
+               if header=$(read_item "${dir}" "${item}" header); then
+                       local IFS=$'\n'
+                       for line in ${header}; do
+                               case "${line%%:*}" in
+                                       Title) 
title=${line##*([^:]):*([[:space:]])} ;;
+                                       Posted) 
posted=${line##*([^:]):*([[:space:]])} ;;
+                                       News-Item-Format) 
format=${line##*([^:]):*([[:space:]])} ;;
+                               esac
+                       done
+                       IFS=${ifs_save}
+                       case ${format} in
+                               1.*|2.*) ;;
+                               *)
+                                       title="(${item} - unknown format 
${format})"
+                                       posted=""
+                                       ;;
                        esac
-               done
-               IFS=${ifs_save}
+               else
+                       title="(${item} - removed?)"
+               fi
                [[ ${repo} != gentoo ]] && title="[${repo}] ${title}"
                line="${posted}$(space $((10 - ${#posted})))  ${title}"
                # truncate the line if it is too long

Reply via email to