[pkg-opensc-commit] [opensc] 10/295: simplyfied netkey-tool

Eric Dorland eric at moszumanska.debian.org
Sat Jun 24 21:11:11 UTC 2017


This is an automated email from the git hooks/post-receive script.

eric pushed a commit to branch master
in repository opensc.

commit 9066d8f999e4038d93f82ca83c4ce378acbd076a
Author: Frank Morgner <frankmorgner at gmail.com>
Date:   Sun Jun 5 02:24:17 2016 +0200

    simplyfied netkey-tool
    
    fixes conversion from 'long' to 'u8', possible loss of data
---
 src/tools/netkey-tool.c | 25 ++++++++-----------------
 1 file changed, 8 insertions(+), 17 deletions(-)

diff --git a/src/tools/netkey-tool.c b/src/tools/netkey-tool.c
index e03db69..59f55f3 100644
--- a/src/tools/netkey-tool.c
+++ b/src/tools/netkey-tool.c
@@ -52,7 +52,7 @@ static struct {
 	const char *label;
 	int   p1, p2;
 	int   tries;
-	int   len;
+	size_t len;
 	u8    value[32];
 } pinlist[]={
 	{"3F005000",     "pin",  "global PIN",  1,-1, 0, 0,
@@ -404,25 +404,16 @@ static int pin_string2int(char *s) {
 	return -1;
 }
 
-static void set_pin(u8 *data, int  *pinlen, char *pin)
+static void set_pin(u8 *data, size_t *pinlen, char *pin)
 {
-	int hex, i, j=0, len;
-	char *p;
+	int hex;
+	size_t i, len;
 
 	len=strlen(pin);
 	hex=(len>=5 && len%3==2);
 	if(hex){
-		len=(len+1)/3;
-		hex=(len<=32);
-	}
-	for(i=0;hex && i<len;++i){
-		if(i>0 && pin[3*i-1]!=':') hex=0;
-		else j=strtol(pin+3*i,&p,16);
-		if(hex && (j<0 || j>255 || (p-pin)!=3*i+2)) hex=0;
-	}
-	if(hex){
-		for(i=0;hex && i<len;++i) data[i]=strtol(pin+3*i,&p,16);
-		*pinlen=len;
+		*pinlen = sizeof (pinlist[0].value);
+		sc_hex_to_bin(pin, data, pinlen);
 	} else {
 		len=strlen(pin); if(len>32) len=32;
 		for(i=0;i<len;++i) data[i]=((u8*)pin)[i];
@@ -452,8 +443,8 @@ int main(
 	int do_help=0, do_unblock=0, do_change=0, do_nullpin=0, do_readcert=0, do_writecert=0;
 	u8 newpin[32];
 	char *certfile=NULL, *p;
-	int r, oerr=0, reader=0, debug=0, newlen=0, pin_nr=-1, cert_nr=-1;
-	size_t i;
+	int r, oerr=0, reader=0, debug=0, pin_nr=-1, cert_nr=-1;
+	size_t i, newlen=0;
 
 	while((r=getopt_long(argc,argv,"hvr:p:u:0:1:",options,NULL))!=EOF) switch(r){
 		case 'h': ++do_help; break;

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-opensc/opensc.git



More information about the pkg-opensc-commit mailing list