public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
From: "Mike Frysinger (vapier)" <vapier@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] gentoo-projects commit in pax-utils: scanelf.c
Date: Thu, 20 Mar 2014 08:06:01 +0000 (UTC)	[thread overview]
Message-ID: <20140320080601.A80E92004C@flycatcher.gentoo.org> (raw)

vapier      14/03/20 08:06:01

  Modified:             scanelf.c
  Log:
  scanelf: convert -E option to use array_t
  
  this avoids silently (and wrongly) truncating the options given to -E.  it also makes the code a lot easier to handle.
  
  #504340 by David Binderman

Revision  Changes    Path
1.262                pax-utils/scanelf.c

file : http://sources.gentoo.org/viewvc.cgi/gentoo-projects/pax-utils/scanelf.c?rev=1.262&view=markup
plain: http://sources.gentoo.org/viewvc.cgi/gentoo-projects/pax-utils/scanelf.c?rev=1.262&content-type=text/plain
diff : http://sources.gentoo.org/viewvc.cgi/gentoo-projects/pax-utils/scanelf.c?r1=1.261&r2=1.262

Index: scanelf.c
===================================================================
RCS file: /var/cvsroot/gentoo-projects/pax-utils/scanelf.c,v
retrieving revision 1.261
retrieving revision 1.262
diff -u -r1.261 -r1.262
--- scanelf.c	20 Mar 2014 07:59:27 -0000	1.261
+++ scanelf.c	20 Mar 2014 08:06:01 -0000	1.262
@@ -1,13 +1,13 @@
 /*
  * Copyright 2003-2012 Gentoo Foundation
  * Distributed under the terms of the GNU General Public License v2
- * $Header: /var/cvsroot/gentoo-projects/pax-utils/scanelf.c,v 1.261 2014/03/20 07:59:27 vapier Exp $
+ * $Header: /var/cvsroot/gentoo-projects/pax-utils/scanelf.c,v 1.262 2014/03/20 08:06:01 vapier Exp $
  *
  * Copyright 2003-2012 Ned Ludd        - <solar@gentoo.org>
  * Copyright 2004-2012 Mike Frysinger  - <vapier@gentoo.org>
  */
 
-static const char rcsid[] = "$Id: scanelf.c,v 1.261 2014/03/20 07:59:27 vapier Exp $";
+static const char rcsid[] = "$Id: scanelf.c,v 1.262 2014/03/20 08:06:01 vapier Exp $";
 const char argv0[] = "scanelf";
 
 #include "paxinc.h"
@@ -18,7 +18,7 @@
 static int file_matches_list(const char *filename, char **matchlist);
 
 /* variables to control behavior */
-static char *match_etypes = NULL;
+static array_t _match_etypes = array_init_decl, *match_etypes = &_match_etypes;
 static array_t _ldpaths = array_init_decl, *ldpaths = &_ldpaths;
 static char scan_ldpath = 0;
 static char scan_envpath = 0;
@@ -1550,6 +1550,8 @@
 static int scanelf_elf(const char *filename, int fd, size_t len)
 {
 	int ret = 1;
+	size_t n;
+	const char *match_etype;
 	elfobj *elf;
 
 	/* verify this is real ELF */
@@ -1568,20 +1570,12 @@
 			break;
 		default: break;
 	}
-	if (match_etypes) {
-		char sbuf[126];
-		strncpy(sbuf, match_etypes, sizeof(sbuf));
-		if (strchr(match_etypes, ',') != NULL) {
-			char *p;
-			while ((p = strrchr(sbuf, ',')) != NULL) {
-				*p = 0;
-				if (etype_lookup(p+1) == get_etype(elf))
-					goto label_ret;
-			}
-		}
-		if (etype_lookup(sbuf) != get_etype(elf))
-			goto label_done;
-	}
+
+	array_for_each(match_etypes, n, match_etype)
+		if (etype_lookup(match_etype) == get_etype(elf))
+			goto label_ret;
+	if (array_cnt(match_etypes))
+		goto label_done;
 
 label_ret:
 	ret = scanelf_elfobj(elf);
@@ -2080,6 +2074,16 @@
 		flags &= ~PF_NO##flag; \
 		flags |= PF_##flag; \
 	}
+static void parse_delimited(array_t *arr, char *arg, const char *delim)
+{
+	char *ele = strtok(arg, delim);
+	if (!ele)	/* edge case: -s '' */
+		xarraypush_str(arr, "");
+	while (ele) {
+		xarraypush_str(arr, ele);
+		ele = strtok(NULL, delim);
+	}
+}
 static int parseargs(int argc, char *argv[])
 {
 	int i;
@@ -2103,7 +2107,8 @@
 			from_file = optarg;
 			break;
 		case 'E':
-			match_etypes = optarg;
+			/* historically, this was comma delimited */
+			parse_delimited(match_etypes, optarg, ",");
 			break;
 		case 'M':
 			match_bits = atoi(optarg);
@@ -2126,17 +2131,10 @@
 		case 'k':
 			xarraypush_str(find_section_arr, optarg);
 			break;
-		case 's': {
+		case 's':
 			/* historically, this was comma delimited */
-			char *this_sym = strtok(optarg, ",");
-			if (!this_sym)	/* edge case: -s '' */
-				xarraypush_str(find_sym_arr, "");
-			while (this_sym) {
-				xarraypush_str(find_sym_arr, this_sym);
-				this_sym = strtok(NULL, ",");
-			}
+			parse_delimited(find_sym_arr, optarg, ",");
 			break;
-		}
 		case 'N':
 			xarraypush_str(find_lib_arr, optarg);
 			break;





             reply	other threads:[~2014-03-20  8:06 UTC|newest]

Thread overview: 62+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-03-20  8:06 Mike Frysinger (vapier) [this message]
  -- strict thread matches above, loose matches on Subject: below --
2015-02-28 22:59 [gentoo-commits] gentoo-projects commit in pax-utils: scanelf.c Mike Frysinger (vapier)
2015-02-24  6:58 Mike Frysinger (vapier)
2015-02-22  2:27 Mike Frysinger (vapier)
2015-02-22  1:38 Mike Frysinger (vapier)
2015-02-22  0:10 Mike Frysinger (vapier)
2015-02-21 19:30 Mike Frysinger (vapier)
2014-11-20  1:25 Mike Frysinger (vapier)
2014-11-05  2:02 Mike Frysinger (vapier)
2014-10-19  7:31 Mike Frysinger (vapier)
2014-03-21  5:33 Mike Frysinger (vapier)
2014-03-21  5:27 Mike Frysinger (vapier)
2014-03-20  8:08 Mike Frysinger (vapier)
2014-01-11  0:28 Mike Frysinger (vapier)
2013-08-14 21:09 Mike Frysinger (vapier)
2013-04-16 16:22 Mike Frysinger (vapier)
2013-04-10 22:27 Mike Frysinger (vapier)
2013-04-08  6:38 Mike Frysinger (vapier)
2013-04-02 21:15 Mike Frysinger (vapier)
2012-11-30 23:25 Mike Frysinger (vapier)
2012-11-10  9:43 Mike Frysinger (vapier)
2012-11-04  8:25 Mike Frysinger (vapier)
2012-11-04  8:23 Mike Frysinger (vapier)
2012-11-04  7:48 Mike Frysinger (vapier)
2012-11-04  6:55 Mike Frysinger (vapier)
2012-08-04  6:08 Mike Frysinger (vapier)
2012-04-29  6:21 Mike Frysinger (vapier)
2012-04-29  5:41 Mike Frysinger (vapier)
2012-01-25  1:58 Mike Frysinger (vapier)
2012-01-23 23:48 Mike Frysinger (vapier)
2012-01-23 22:28 Mike Frysinger (vapier)
2011-12-21 22:17 Mike Frysinger (vapier)
2011-12-21 22:00 Mike Frysinger (vapier)
2011-12-21 17:34 Mike Frysinger (vapier)
2011-12-13  5:12 Mike Frysinger (vapier)
2011-10-13  4:49 Mike Frysinger (vapier)
2011-09-27 22:20 Mike Frysinger (vapier)
2011-09-27 19:56 Mike Frysinger (vapier)
2011-09-27 19:29 Mike Frysinger (vapier)
2011-09-27 19:21 Mike Frysinger (vapier)
2011-09-27 19:20 Mike Frysinger (vapier)
2011-09-27 17:28 Mike Frysinger (vapier)
2011-08-08  1:56 Mike Frysinger (vapier)
2011-07-30 17:08 Ned Ludd (solar)
2010-12-06 20:43 Mike Frysinger (vapier)
2010-01-15 11:56 Mike Frysinger (vapier)
2009-12-20 20:25 Mike Frysinger (vapier)
2009-12-01 10:18 Mike Frysinger (vapier)
2009-03-15  9:13 Mike Frysinger (vapier)
2009-03-15  9:01 Mike Frysinger (vapier)
2009-03-15  8:53 Mike Frysinger (vapier)
2008-12-30 13:38 Mike Frysinger (vapier)
2008-12-30 12:38 Mike Frysinger (vapier)
2008-12-10 20:06 Fabian Groffen (grobian)
2008-12-10 20:05 Fabian Groffen (grobian)
2008-11-17 18:09 Diego Petteno (flameeyes)
2008-11-17 18:03 Diego Petteno (flameeyes)
2008-10-22 17:03 Diego Petteno (flameeyes)
2008-10-22 15:20 Diego Petteno (flameeyes)
2008-09-29  6:05 Mike Frysinger (vapier)
2008-09-29  6:03 Mike Frysinger (vapier)
2008-09-29  6:01 Mike Frysinger (vapier)

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20140320080601.A80E92004C@flycatcher.gentoo.org \
    --to=vapier@gentoo.org \
    --cc=gentoo-commits@lists.gentoo.org \
    --cc=gentoo-dev@lists.gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox