Skip to content

Commit cbb01b3

Browse files
authored
Merge pull request #672 from libtom/some-fixes
Some fixes
2 parents 29af892 + 5a1545a commit cbb01b3

File tree

12 files changed

+105
-3
lines changed

12 files changed

+105
-3
lines changed

src/misc/pem/pem_pkcs.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ static int s_get_pka(ltc_asn1_list *pub, enum ltc_pka_id *pka)
6969

7070
typedef int (*import_fn)(const unsigned char *, unsigned long, void*);
7171

72-
static import_fn s_import_x509_fns[LTC_PKA_NUM] = {
72+
static const import_fn s_import_x509_fns[LTC_PKA_NUM] = {
7373
#ifdef LTC_MRSA
7474
[LTC_PKA_RSA] = (import_fn)rsa_import_x509,
7575
#endif
@@ -176,7 +176,7 @@ static int s_extract_pka(unsigned char *pem, unsigned long w, enum ltc_pka_id *p
176176
return err;
177177
}
178178

179-
static import_fn s_import_openssl_fns[LTC_PKA_NUM] = {
179+
static const import_fn s_import_openssl_fns[LTC_PKA_NUM] = {
180180
#ifdef LTC_MRSA
181181
[LTC_PKA_RSA] = (import_fn)rsa_import,
182182
#endif

src/misc/pem/pem_read.c

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,25 @@ static void s_unget_line(char *buf, unsigned long buflen, struct get_char *g)
4343
COPY_STR(g->unget_buf, buf, buflen);
4444
}
4545

46+
static void s_tts(char *buf, unsigned long *buflen)
47+
{
48+
while(1) {
49+
unsigned long blen = *buflen;
50+
if (blen < 2)
51+
return;
52+
blen--;
53+
switch (buf[blen]) {
54+
case ' ':
55+
case '\t':
56+
buf[blen] = '\0';
57+
*buflen = blen;
58+
break;
59+
default:
60+
return;
61+
}
62+
}
63+
}
64+
4665
static char* s_get_line(char *buf, unsigned long *buflen, struct get_char *g)
4766
{
4867
unsigned long blen = 0;
@@ -64,11 +83,13 @@ static char* s_get_line(char *buf, unsigned long *buflen, struct get_char *g)
6483
if (c_ == '\r') {
6584
buf[--blen] = '\0';
6685
}
86+
s_tts(buf, &blen);
6787
*buflen = blen;
6888
return buf;
6989
}
7090
if (c == -1 || c == '\0') {
7191
buf[blen] = '\0';
92+
s_tts(buf, &blen);
7293
*buflen = blen;
7394
return buf;
7495
}
@@ -163,6 +184,7 @@ int pem_read(void *pem, unsigned long *w, struct pem_headers *hdr, struct get_ch
163184
unsigned long slen, linelen;
164185
int err, hdr_ok = 0;
165186
int would_overflow = 0;
187+
unsigned char empty_lines = 0;
166188

167189
linelen = sizeof(buf);
168190
if (s_get_line(buf, &linelen, g) == NULL) {
@@ -184,6 +206,11 @@ int pem_read(void *pem, unsigned long *w, struct pem_headers *hdr, struct get_ch
184206
hdr_ok = 1;
185207
break;
186208
}
209+
if (!slen) {
210+
if (empty_lines)
211+
break;
212+
empty_lines++;
213+
}
187214
if (!would_overflow && s_fits_buf(wpem, slen, end)) {
188215
XMEMCPY(wpem, buf, slen);
189216
} else {

tests/common.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,13 +103,14 @@ static DIR *s_opendir(const char *path, char *mypath, unsigned long l)
103103
static int s_read_and_process(FILE *f, unsigned long sz, void *ctx, dir_iter_cb process)
104104
{
105105
int err = CRYPT_OK;
106-
void* buf = XMALLOC(sz);
106+
void* buf = XMALLOC(sz + 1);
107107
if (buf == NULL)
108108
return CRYPT_MEM;
109109
if (fread(buf, 1, sz, f) != sz) {
110110
err = CRYPT_ERROR;
111111
goto out;
112112
}
113+
((unsigned char *)buf)[sz] = 0x0;
113114
err = process(buf, sz, ctx);
114115
out:
115116
XFREE(buf);
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
-----BEGIN RSA PRIVATE KEY-----
2+
MIIEowIBAAKCAQEAs2jsmIoFuWzMkilJaA8//5/T30cnuzX9GImXUrFR2k9EKTMt
3+
GMHCdKlWOl3BV+BTAU9TLz7Jzd/iJ5GJ6B8TrH1PHFmHpy8/qE/S5OhinIpIi7eb
4+
ABqnoVcwDdCa8ugzq8k8SWxhRNXfVIlwz4NH1caJ8lmiERFj7IvNKqEhzAk0pyDr
5+
8hubveTC39xREujKlsqutpPAFPJ3f2ybVsdykX5rx0h5SslG3jVWYhZ/SOb2aIzO
6+
r0RMjhQmsYRwbpt3anjlBZ98aOzg7GAkbO8093X5VVk9vaPRg0zxJQ0Do0YLyzkR
7+
isSAIFb0tdKuDnjRGK6y/N2j6At2HjkxntbtGQIDAQABAoIBADYq6LxJd977LWy3
8+
0HT9nboFPIf+SM2qSEc/S5Po+6ipJBA4ZlZCMf7dHa6znet1TDpqA9iQ4YcqIHMH
9+
6xZNQ7hhgSAzG9TrXBHqP+djDlrrGWotvjuy0IfS9ixFnnLWjrtAH9afRWLuG+a/
10+
NHNC1M6DiiTE0TzL/lpt/zzut3CNmWzH+t19X6UsxUg95AzooEeewEYkv25eumWD
11+
mfQZfCtSlIw1sp/QwxeJa/6LJw7KcPZ1wXUm1BN0b9eiKt9Cmni1MS7elgpZlgGt
12+
xtfGTZtNLQ7bgDiM8MHzUfPBhbceNSIx2BeCuOCs/7eaqgpyYHBbAbuBQex2H61l
13+
Lcc3Tz0CgYEA4Kx/avpCPxnvsJ+nHVQm5d/WERuDxk4vH1DNuCYBvXTdVCGADf6a
14+
F5No1JcTH3nPTyPWazOyGdT9LcsEJicLyD8vCM6hBFstG4XjqcAuqG/9DRsElpHQ
15+
yi1zc5DNP7Vxmiz9wII0Mjy0abYKtxnXh9YK4a9g6wrcTpvShhIcIb8CgYEAzGzG
16+
lorVCfX9jXULIznnR/uuP5aSnTEsn0xJeqTlbW0RFWLdj8aIL1peirh1X89HroB9
17+
GeTNqEJXD+3CVL2cx+BRggMDUmEz4hR59meZCDGUyT5fex4LIsceb/ESUl2jo6Sw
18+
HXwWbN67rQ55N4oiOcOppsGxzOHkl5HdExKidycCgYEAr5Qev2tz+fw65LzfzHvH
19+
Kj4S/KuT/5V6He731cFd+sEpdmX3vPgLVAFPG1Q1DZQT/rTzDDQKK0XX1cGiLG63
20+
NnaqOye/jbfzOF8Z277kt51NFMDYhRLPKDD82IOA4xjY/rPKWndmcxwdob8yAIWh
21+
efY76sMz6ntCT+xWSZA9i+ECgYBWMZM2TIlxLsBfEbfFfZewOUWKWEGvd9l5vV/K
22+
D5cRIYivfMUw5yPq2267jPUolayCvniBH4E7beVpuPVUZ7KgcEvNxtlytbt7muil
23+
5Z6X3tf+VodJ0Swe2NhTmNEB26uwxzLe68BE3VFCsbSYn2y48HAq+MawPZr18bHG
24+
ZfgMxwKBgHHRg6HYqF5Pegzk1746uH2G+OoCovk5ylGGYzcH2ghWTK4agCHfBcDt
25+
EYqYAev/l82wi+OZ5O8U+qjFUpT1CVeUJdDs0o5u19v0UJjunU1cwh9jsxBZAWLy
26+
PAGd6SWf4S3uQCTw6dLeMna25YIlPh5qPA6I/pAahe8e3nSu2ckl
27+
-----END RSA PRIVATE KEY-----

tests/pem/pkcs/invalid/single_line

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
-----BEGIN EC PRIVATE KEY-----MHcCAQEEIFF9oAGC6vxNLIU8D+nuvM8ms1QQlPtpGzQTfzEBVB06oAoGCCqGSM49AwEHoUQDQgAE3VU0nT1p5W0zKHDknAgQpsOODuM2/AoZ/6wNqC9AoUCEpQempFg0aBqxleOP0uW0HG1YwCnOF8N0D8Q2RR2mlw==-----END EC PRIVATE KEY-----
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
-----BEGIN PUBLIC KEY-----MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE3VU0nT1p5W0zKHDknAgQpsOODuM2/AoZ/6wNqC9AoUCEpQempFg0aBqxleOP0uW0HG1YwCnOF8N0D8Q2RR2mlw==-----END PUBLIC KEY-----
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
-----BEGIN EC PRIVATE KEY-----
2+
3+
MHcCAQEEIFF9oAGC6vxNLIU8D+nuvM8ms1QQlPtpGzQTfzEBVB06oAoGCCqGSM49
4+
5+
AwEHoUQDQgAE3VU0nT1p5W0zKHDknAgQpsOODuM2/AoZ/6wNqC9AoUCEpQempFg0
6+
7+
aBqxleOP0uW0HG1YwCnOF8N0D8Q2RR2mlw==
8+
9+
-----END EC PRIVATE KEY-----
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
-----BEGIN PUBLIC KEY-----
2+
3+
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE3VU0nT1p5W0zKHDknAgQpsOODuM2
4+
5+
/AoZ/6wNqC9AoUCEpQempFg0aBqxleOP0uW0HG1YwCnOF8N0D8Q2RR2mlw==
6+
7+
-----END PUBLIC KEY-----'
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
-----BEGIN PUBLIC KEY-----
2+
MHcCAQEEIFF9oAGC6vxNLIU8D+nuvM8ms1QQlPtp
3+
GzQTfzEBVB06oAoGCCqGSM49AwEHoUQDQgAE3VU0
4+
nT1p5W0zKHDknAgQpsOODuM2/AoZ/6wNqC9AoUCE
5+
pQempFg0aBqxleOP0uW0HG1YwCnOF8N0D8Q2RR2m
6+
lw==-----END PUBLIC KEY-----
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
-----BEGIN EC PRIVATE KEY-----
2+
MHcCAQEEIFF9oAGC6vxNLIU8D+nuvM8m
3+
s1QQlPtpGzQTfzEBVB06oAoGCCqGSM49
4+
AwEHoUQDQgAE3VU0nT1p5W0zKHDknAgQ
5+
psOODuM2/AoZ/6wNqC9AoUCEpQempFg0
6+
aBqxleOP0uW0HG1YwCnOF8N0D8Q2RR2m
7+
lw==
8+
-----END EC PRIVATE KEY-----

0 commit comments

Comments
 (0)