From c8ffbe7706bb18ff5f024b86e6207ab5dfac0b1f Mon Sep 17 00:00:00 2001
From: Paul Bakker
Date: Mon, 5 Dec 2011 14:22:49 +0000
Subject: [PATCH] - Corrected removal of leading '00:' in printing serial
numbers in certificates and CRLs
---
ChangeLog | 2 ++
library/x509parse.c | 18 +++++++-----------
2 files changed, 9 insertions(+), 11 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 01f963537..719c8126d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -53,6 +53,8 @@ Bugfix
appended with '....' after first 28 octets
* Improved build support for s390x and sparc64 in bignum.h
* Fixed MS Visual C++ name clash with int64 in sha4.h
+ * Corrected removal of leading '00:' in printing serial numbers in
+ certificates and CRLs
= Version 1.0.0 released on 2011-07-27
Features
diff --git a/library/x509parse.c b/library/x509parse.c
index 83413440e..d49b6435c 100644
--- a/library/x509parse.c
+++ b/library/x509parse.c
@@ -2426,6 +2426,9 @@ int x509parse_serial_gets( char *buf, size_t size, const x509_buf *serial )
for( i = 0; i < nr; i++ )
{
+ if( i == 0 && serial->p[i] == 0x0 )
+ continue;
+
ret = snprintf( p, n, "%02X%s",
serial->p[i], ( i < nr - 1 ) ? ":" : "" );
SAFE_SNPRINTF();
@@ -2589,7 +2592,7 @@ int x509parse_crl_info( char *buf, size_t size, const char *prefix,
const x509_crl *crl )
{
int ret;
- size_t i, n, nr;
+ size_t n;
char *p;
const x509_crl_entry *entry;
@@ -2631,22 +2634,15 @@ int x509parse_crl_info( char *buf, size_t size, const char *prefix,
prefix );
SAFE_SNPRINTF();
- nr = ( entry->serial.len <= 32 )
- ? entry->serial.len : 32;
+ ret = x509parse_serial_gets( p, n, &entry->serial);
+ SAFE_SNPRINTF();
- for( i = 0; i < nr; i++ )
- {
- ret = snprintf( p, n, "%02X%s",
- entry->serial.p[i], ( i < nr - 1 ) ? ":" : "" );
- SAFE_SNPRINTF();
- }
-
ret = snprintf( p, n, " revocation date: " \
"%04d-%02d-%02d %02d:%02d:%02d",
entry->revocation_date.year, entry->revocation_date.mon,
entry->revocation_date.day, entry->revocation_date.hour,
entry->revocation_date.min, entry->revocation_date.sec );
- SAFE_SNPRINTF();
+ SAFE_SNPRINTF();
entry = entry->next;
}