@@ -518,3 +518,64 @@ func generateInvalidTestPrivateKey(t *testing.T) *rsa.PrivateKey {
518
518
519
519
return key
520
520
}
521
+ func TestNewlineHeaders (t * testing.T ) {
522
+ cases := []struct {
523
+ name string
524
+ content string
525
+ expect string
526
+ }{
527
+ {
528
+ name : "empty" ,
529
+ content : "" ,
530
+ expect : "" ,
531
+ },
532
+ {
533
+ name : "nonsense" ,
534
+ content : "not a key or cert" ,
535
+ expect : "not a key or cert" ,
536
+ },
537
+ {
538
+ name : "pem-shaped nonsense" ,
539
+ content : "-----BEGIN RANDOM PEM-----stuff-----END RANDOM PEM-----" ,
540
+ expect : "-----BEGIN RANDOM PEM-----stuff\n -----END RANDOM PEM-----" ,
541
+ },
542
+ {
543
+ name : "no newlines key" ,
544
+ content : "-----BEGIN ANY KIND OF PRIVATE KEY-----stuff-----END ANY PRIVATE KEY-----" ,
545
+ expect : "-----BEGIN ANY KIND OF PRIVATE KEY-----\n stuff\n -----END ANY PRIVATE KEY-----" ,
546
+ },
547
+ {
548
+ name : "no newlines cert" ,
549
+ content : "-----BEGIN ANY KIND OF CERTIFICATE-----stuff-----END ANY CERTIFICATE-----" ,
550
+ expect : "-----BEGIN ANY KIND OF CERTIFICATE-----\n stuff\n -----END ANY CERTIFICATE-----" ,
551
+ },
552
+ // extra newlines between header/footer and content is okay.
553
+ {
554
+ name : "with newlines key" ,
555
+ content : "-----BEGIN ANY KIND OF PRIVATE KEY-----\n stuff\n -----END ANY PRIVATE KEY-----" ,
556
+ expect : "-----BEGIN ANY KIND OF PRIVATE KEY-----\n \n stuff\n \n -----END ANY PRIVATE KEY-----" ,
557
+ },
558
+ {
559
+ name : "with newlines cert" ,
560
+ content : "-----BEGIN ANY KIND OF CERTIFICATE-----\n stuff\n more\n stuff\n -----END ANY CERTIFICATE-----" ,
561
+ expect : "-----BEGIN ANY KIND OF CERTIFICATE-----\n \n stuff\n more\n stuff\n \n -----END ANY CERTIFICATE-----" ,
562
+ },
563
+ // extra junk outside the header/footer is okay.
564
+ {
565
+ name : "extra junk key" ,
566
+ content : "note to self\n -----BEGIN ANY KIND OF PRIVATE KEY-----\n stuff\n -----END ANY PRIVATE KEY-----\n another note" ,
567
+ expect : "note to self\n \n -----BEGIN ANY KIND OF PRIVATE KEY-----\n \n stuff\n \n -----END ANY PRIVATE KEY-----\n \n another note" ,
568
+ },
569
+ {
570
+ name : "extra junk cert" ,
571
+ content : "note to self\n -----BEGIN ANY KIND OF CERTIFICATE-----\n stuff\n -----END ANY CERTIFICATE-----\n another note" ,
572
+ expect : "note to self\n \n -----BEGIN ANY KIND OF CERTIFICATE-----\n \n stuff\n \n -----END ANY CERTIFICATE-----\n \n another note" ,
573
+ },
574
+ }
575
+ for _ , tc := range cases {
576
+ t .Run (tc .name , func (t * testing.T ) {
577
+ got := newlineHeaders ([]byte (tc .content ))
578
+ must .Eq (t , tc .expect , string (got ))
579
+ })
580
+ }
581
+ }
0 commit comments