Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 5 additions & 3 deletions core/src/main/java/com/styra/opa/wasm/OpaWasm.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import com.fasterxml.jackson.databind.ObjectMapper;
import com.styra.opa.wasm.builtins.Provided;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
Expand Down Expand Up @@ -195,9 +196,10 @@ public String readString(int addr) {
}

public int writeResult(String result) {
var resultStrAddr = exports.opaMalloc(result.length());
memory().writeCString(resultStrAddr, result);
var resultAddr = exports.opaJsonParse(resultStrAddr, result.length());
var bytes = result.getBytes(StandardCharsets.UTF_8);
var resultStrAddr = exports.opaMalloc(bytes.length);
memory().write(resultStrAddr, bytes);
var resultAddr = exports.opaJsonParse(resultStrAddr, bytes.length);
exports.opaFree(resultStrAddr);
return resultAddr;
}
Expand Down
38 changes: 38 additions & 0 deletions core/src/test/java/com/styra/opa/wasm/Issue176Test.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package com.styra.opa.wasm;

import static org.junit.jupiter.api.Assertions.assertEquals;

import java.nio.file.Path;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;

public class Issue176Test {
static Path wasmFile;

@BeforeAll
public static void beforeAll() throws Exception {
wasmFile =
OpaCli.compile("issue176", "issue176/emdash_sprintf", "issue176/emdash_literal")
.resolve("policy.wasm");
}

@Test
public void emdashSprintf() {
var opa = OpaPolicy.builder().withPolicy(wasmFile).build();

var result = Utils.getResult(opa.entrypoint("issue176/emdash_sprintf").evaluate());

assertEquals(
"requested String value is invalid — please use one of the allowed values",
result.asText());
}

@Test
public void emdashLiteral() {
var opa = OpaPolicy.builder().withPolicy(wasmFile).build();

var result = Utils.getResult(opa.entrypoint("issue176/emdash_literal").evaluate());

assertEquals("This contains an em-dash — in a string literal", result.asText());
}
}
5 changes: 5 additions & 0 deletions core/src/test/resources/fixtures/issue176/policy.rego
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package issue176

emdash_sprintf := sprintf("requested %s value is invalid — please use one of the allowed values", ["String"])

emdash_literal := "This contains an em-dash — in a string literal"
Loading