From 379e4d03fbeb0101c53dd54794bbc1033fd260a3 Mon Sep 17 00:00:00 2001 From: Jonas Lara Date: Thu, 23 Apr 2026 15:58:34 -0600 Subject: [PATCH] =?UTF-8?q?Corregir=20crash=20al=20parsear=20Subject=20DN?= =?UTF-8?q?=20con=20comas=20en=20la=20raz=C3=B3n=20social?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit El SAT emite certificados FIEL donde la razón social (O=) puede contener comas (ej: "SEMILLAS, HORTALIZAS Y FLORES"). El código anterior hacía Split(',') sobre el Subject completo y luego accedía a Split('=')[1] directamente, lanzando IndexOutOfRangeException cuando un fragmento no contenía '='. Solución: usar Split('=', 2) con máximo 2 partes y filtrar fragmentos sin '=' antes de mapear a KeyValuePair. Aplicado en SubjectKeyValuePairs e IssuerKeyValuePairs. Esto resolvio mi problema al tratar con una razon social que lleva una coma en el nombre --- Core/Certificate.cs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/Core/Certificate.cs b/Core/Certificate.cs index 7189e99..7462674 100644 --- a/Core/Certificate.cs +++ b/Core/Certificate.cs @@ -132,7 +132,10 @@ public string CertificateNumber public List> IssuerKeyValuePairs { get => _x509Certificate2.Issuer.Split(',') - .Select(x => new KeyValuePair(x.Split('=')[0].Trim(), x.Split('=')[1].Trim())).ToList(); + .Select(x => x.Split('=', 2)) + .Where(parts => parts.Length == 2) + .Select(parts => new KeyValuePair(parts[0].Trim(), parts[1].Trim())) + .ToList(); } /// @@ -151,7 +154,10 @@ public string Issuer public List> SubjectKeyValuePairs { get => _x509Certificate2.Subject.Split(',') - .Select(x => new KeyValuePair(x.Split('=')[0].Trim(), x.Split('=')[1].Trim())).ToList(); + .Select(x => x.Split('=', 2)) + .Where(parts => parts.Length == 2) + .Select(parts => new KeyValuePair(parts[0].Trim(), parts[1].Trim())) + .ToList(); } ///