return nil, errors.New("x509: no SerialNumber given")
        }
 
-       if template.BasicConstraintsValid && !template.IsCA && (template.MaxPathLen != 0 || template.MaxPathLenZero) {
+       if template.BasicConstraintsValid && !template.IsCA && template.MaxPathLen != -1 && (template.MaxPathLen != 0 || template.MaxPathLenZero) {
                return nil, errors.New("x509: only CAs are allowed to specify MaxPathLen")
        }
 
 
                BasicConstraintsValid: true,
                IsCA:                  false,
        }
-       cert := serialiseAndParse(t, template)
-       if m := cert.MaxPathLen; m != -1 {
+       if m := serialiseAndParse(t, template).MaxPathLen; m != -1 {
                t.Errorf("MaxPathLen should be -1 when IsCa is false, got %d", m)
        }
 
+       template.MaxPathLen = -1
+       if m := serialiseAndParse(t, template).MaxPathLen; m != -1 {
+               t.Errorf("MaxPathLen should be -1 when IsCa is false and MaxPathLen set to -1, got %d", m)
+       }
+
        template.MaxPathLen = 5
        if _, err := CreateCertificate(rand.Reader, template, template, &testPrivateKey.PublicKey, testPrivateKey); err == nil {
                t.Error("specifying a MaxPathLen when IsCA is false should fail")
        }
 
        template.BasicConstraintsValid = false
-       cert2 := serialiseAndParse(t, template)
-       if m := cert2.MaxPathLen; m != 0 {
+       if m := serialiseAndParse(t, template).MaxPathLen; m != 0 {
                t.Errorf("Bad MaxPathLen should be ignored if BasicConstraintsValid is false, got %d", m)
        }
 }