Skip to content

Commit d504b73

Browse files
committed
fix(xml): preserve UTF-8 declaration in signed DPS output
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
1 parent fae567e commit d504b73

File tree

2 files changed

+14
-1
lines changed

2 files changed

+14
-1
lines changed

src/Xml/DpsSigner.php

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -271,6 +271,12 @@ private function signXml(string $xml, string $privateKeyPem, string $certificate
271271
$keyInfo->appendChild($x509Data);
272272
$sig->appendChild($keyInfo);
273273

274-
return $doc->saveXML() ?: $xml;
274+
$serializedDocument = $doc->saveXML($doc->documentElement);
275+
276+
if ($serializedDocument === false || $serializedDocument === '') {
277+
return $xml;
278+
}
279+
280+
return "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" . $serializedDocument;
275281
}
276282
}

tests/Unit/Xml/DpsSignerTest.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,13 @@ public function testSignedXmlIsStillValidXml(): void
122122
self::assertTrue($doc->loadXML($signed), 'Signed output must be valid XML');
123123
}
124124

125+
public function testSignedXmlIncludesExplicitUtf8EncodingDeclaration(): void
126+
{
127+
$signed = $this->signer->sign($this->testXml, $this->testCnpj);
128+
129+
self::assertStringStartsWith('<?xml version="1.0" encoding="UTF-8"?>', $signed);
130+
}
131+
125132
public function testSignatureElementIsAppendedToDpsRoot(): void
126133
{
127134
$signed = $this->signer->sign($this->testXml, $this->testCnpj);

0 commit comments

Comments
 (0)