Skip to content
This repository was archived by the owner on Nov 21, 2018. It is now read-only.

Commit 8e0139a

Browse files
committed
Escape correctly in toml writer
1 parent 25573f7 commit 8e0139a

File tree

1 file changed

+21
-12
lines changed

1 file changed

+21
-12
lines changed

master/build-rust-manifest.py

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -481,39 +481,48 @@ def url_and_hash_of_rust_package(target, rustc_short_version):
481481
}
482482

483483
def write_manifest(manifest, file_path):
484+
def quote(value):
485+
return '"' + str(value).replace('"', r'\"') + '"'
486+
487+
def bare_key(key):
488+
if re.match(r"^[a-zA-Z0-9_\-]+$", key):
489+
return key
490+
else:
491+
return quote(key)
492+
484493
with open(file_path, "w") as f:
485494
f.write('manifest-version = "2"\n')
486-
f.write('date = "' + today + '"\n')
495+
f.write('date = ' + quote(today) + '\n')
487496
f.write('\n')
488497

489498
for name, pkg in sorted(manifest["pkg"].items()):
490-
f.write('[pkg.' + name + ']\n')
491-
f.write('version = "' + pkg["version"] + '"\n')
499+
f.write('[pkg.' + bare_key(name) + ']\n')
500+
f.write('version = ' + quote(pkg["version"]) + '\n')
492501
f.write('\n')
493502

494503
for target, target_pkg in sorted(pkg["target"].items()):
495504
available = "true"
496505
if not target_pkg["available"]: available = "false"
497506

498-
f.write('[pkg.' + name + '.target.' + target + ']\n')
507+
f.write('[pkg.' + bare_key(name) + '.target.' + bare_key(target) + ']\n')
499508
f.write('available = ' + available + '\n')
500-
f.write('url = "' + target_pkg["url"] + '"\n')
501-
f.write('hash = "' + target_pkg["hash"] + '"\n')
509+
f.write('url = ' + quote(target_pkg["url"]) + '\n')
510+
f.write('hash = ' + quote(target_pkg["hash"]) + '\n')
502511
f.write('\n')
503512

504513
components = target_pkg.get("components")
505514
if components:
506515
for component in components:
507-
f.write('[[pkg.' + name + '.target.' + target + '.components]]\n')
508-
f.write('pkg = "' + component["pkg"] + '"\n')
509-
f.write('target = "' + component["target"] + '"\n')
516+
f.write('[[pkg.' + bare_key(name) + '.target.' + bare_key(target) + '.components]]\n')
517+
f.write('pkg = ' + quote(component["pkg"]) + '\n')
518+
f.write('target = ' + quote(component["target"]) + '\n')
510519

511520
extensions = target_pkg.get("extensions")
512521
if extensions:
513522
for extension in extensions:
514-
f.write('[[pkg.' + name + '.target.' + target + '.extensions]]\n')
515-
f.write('pkg = "' + extension["pkg"] + '"\n')
516-
f.write('target = "' + extension["target"] + '"\n')
523+
f.write('[[pkg.' + bare_key(name) + '.target.' + bare_key(target) + '.extensions]]\n')
524+
f.write('pkg = ' + quote(extension["pkg"]) + '\n')
525+
f.write('target = ' + quote(extension["target"]) + '\n')
517526

518527
f.write('\n')
519528

0 commit comments

Comments
 (0)