Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 082c5f31 authored by Cole Faust's avatar Cole Faust
Browse files

Fix invalid json when product variables have quotes

Go's json encoder will escape quotes with backslashes.
But we put the encoded json into a Starlark string
literal, which will evaluate the \" into just a regular
quote, so they won't be escaped when the json.parse()
gets to them.

Escape all backslashes so this doesn't happen.

Test: lunch sdk_phone_x86_64-userdebug; b build //build/bazel/examples/apex/minimal:build.bazel.examples.apex.minimal
Change-Id: I473e6c42968fcf73d47dec61670956a7ac9a6c88
parent 113bd150
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package android
// product variables necessary for soong_build's operation.

import (
	"bytes"
	"encoding/json"
	"errors"
	"fmt"
@@ -305,6 +306,9 @@ func saveToBazelConfigFile(config *productVariables, outDir string) error {
	if err != nil {
		return fmt.Errorf("cannot marshal config data: %s", err.Error())
	}
	// The backslashes need to be escaped because this text is going to be put
	// inside a Starlark string literal.
	configJson = bytes.ReplaceAll(configJson, []byte("\\"), []byte("\\\\"))

	bzl := []string{
		bazel.GeneratedBazelFileWarning,
@@ -317,11 +321,11 @@ product_var_constraints = _product_var_constraints
arch_variant_product_var_constraints = _arch_variant_product_var_constraints
`,
	}
	err = ioutil.WriteFile(filepath.Join(dir, "product_variables.bzl"), []byte(strings.Join(bzl, "\n")), 0644)
	err = os.WriteFile(filepath.Join(dir, "product_variables.bzl"), []byte(strings.Join(bzl, "\n")), 0644)
	if err != nil {
		return fmt.Errorf("Could not write .bzl config file %s", err)
	}
	err = ioutil.WriteFile(filepath.Join(dir, "BUILD"), []byte(bazel.GeneratedBazelFileWarning), 0644)
	err = os.WriteFile(filepath.Join(dir, "BUILD"), []byte(bazel.GeneratedBazelFileWarning), 0644)
	if err != nil {
		return fmt.Errorf("Could not write BUILD config file %s", err)
	}