From 78afad17bf576dcd469bfb51dcc4f9539612b69b Mon Sep 17 00:00:00 2001 From: "Yann E. MORIN" Date: Sat, 13 Nov 2021 14:28:23 +0100 Subject: [PATCH] package/pkg-utils: generate proper JSON strings where they are emitted Currently, our clean-json macro does two things: - remove excessive commas before a closing list or dictionary; - escape the backslash. We are going to need the comma-drop feature of clean-json, but on a JSON blurb where all the characters, backslash included, are already all properly escaped, so that we do not need further escape. So, we drop the backslash escaping from clean-json, and use the newly introduced mk-json-str helper in every locations where we turn a Makefile variable into a JSON string. Signed-off-by: Yann E. MORIN Signed-off-by: Thomas Petazzoni --- package/pkg-utils.mk | 53 ++++++++++++++++++++++++++++---------------- 1 file changed, 34 insertions(+), 19 deletions(-) diff --git a/package/pkg-utils.mk b/package/pkg-utils.mk index 15e3e14e1b..0b0ff77419 100644 --- a/package/pkg-utils.mk +++ b/package/pkg-utils.mk @@ -96,7 +96,7 @@ endef # $(1): upper-case package or filesystem name define json-info "$($(1)_NAME)": { - "type": "$($(1)_TYPE)", + "type": $(call mk-json-str,$($(1)_TYPE)), $(if $(filter rootfs,$($(1)_TYPE)), \ $(call _json-info-fs,$(1)), \ $(call _json-info-pkg,$(1)), \ @@ -107,47 +107,59 @@ endef # _json-info-pkg, _json-info-pkg-details, _json-info-fs: private helpers # for json-info, above define _json-info-pkg - "name": "$($(1)_RAWNAME)", + "name": $(call mk-json-str,$($(1)_RAWNAME)), $(if $($(1)_IS_VIRTUAL), \ "virtual": true$(comma), "virtual": false$(comma) $(call _json-info-pkg-details,$(1)) \ ) - "build_dir": "$(patsubst $(CONFIG_DIR)/%,%,$($(1)_BUILDDIR))", + "build_dir": $(call mk-json-str,$(patsubst $(CONFIG_DIR)/%,%,$($(1)_BUILDDIR))), $(if $(filter target,$($(1)_TYPE)), \ "install_target": $(call yesno-to-bool,$($(1)_INSTALL_TARGET))$(comma) \ "install_staging": $(call yesno-to-bool,$($(1)_INSTALL_STAGING))$(comma) \ "install_images": $(call yesno-to-bool,$($(1)_INSTALL_IMAGES))$(comma) \ ) "dependencies": [ - $(call make-dq-comma-list,$(sort $($(1)_FINAL_ALL_DEPENDENCIES))) + $(call make-comma-list, \ + $(foreach dep,$(sort $($(1)_FINAL_ALL_DEPENDENCIES)), \ + $(call mk-json-str,$(dep)) \ + ) \ + ) ], "reverse_dependencies": [ - $(call make-dq-comma-list,$(sort $($(1)_RDEPENDENCIES))) + $(call make-comma-list, \ + $(foreach dep,$(sort $($(1)_RDEPENDENCIES)), \ + $(call mk-json-str,$(dep)) \ + ) \ + ) ] $(if $($(1)_CPE_ID_VALID), \ - $(comma) "cpe-id": "$($(1)_CPE_ID)" \ + $(comma) "cpe-id": $(call mk-json-str,$($(1)_CPE_ID)) \ ) $(if $($(1)_IGNORE_CVES), $(comma) "ignore_cves": [ - $(call make-dq-comma-list,$(sort $($(1)_IGNORE_CVES))) + $(call make-comma-list, \ + $(foreach cve,$(sort $($(1)_IGNORE_CVES)), \ + $(call mk-json-str,$(cve)) \ + ) \ + ) ] ) endef define _json-info-pkg-details - "version": "$($(1)_DL_VERSION)", - "licenses": "$($(1)_LICENSE)", - "dl_dir": "$($(1)_DL_SUBDIR)", + "version": $(call mk-json-str,$($(1)_DL_VERSION)), + "licenses": $(call mk-json-str,$($(1)_LICENSE)), + "dl_dir": $(call mk-json-str,$($(1)_DL_SUBDIR)), "downloads": [ $(foreach dl,$(sort $($(1)_ALL_DOWNLOADS)), { - "source": "$(notdir $(dl))", + "source": $(call mk-json-str,$(notdir $(dl))), "uris": [ - $(call make-dq-comma-list, - $(subst \|,|, - $(call DOWNLOAD_URIS,$(dl),$(1)) - ) + $(call make-comma-list, \ + $(foreach uri,$(call DOWNLOAD_URIS,$(dl),$(1)), \ + $(call mk-json-str,$(subst \|,|,$(uri))) \ + ) \ ) ] }, @@ -157,11 +169,15 @@ endef define _json-info-fs "image_name": $(if $($(1)_FINAL_IMAGE_NAME), \ - "$($(1)_FINAL_IMAGE_NAME)", \ + $(call mk-json-str,$($(1)_FINAL_IMAGE_NAME)), \ null \ ), "dependencies": [ - $(call make-dq-comma-list,$(sort $($(1)_DEPENDENCIES))) + $(call make-comma-list, \ + $(foreach dep,$(sort $($(1)_DEPENDENCIES)), \ + $(call mk-json-str,$(dep)) \ + ) \ + ) ] endef @@ -171,9 +187,8 @@ endef clean-json = $(strip \ $(subst $(comma)},}, $(subst $(comma)$(space)},$(space)}, \ $(subst $(comma)],], $(subst $(comma)$(space)],$(space)], \ - $(subst \,\\, \ $(strip $(1)) \ - ))))) \ + )))) \ ) # mk-json-str -- escape and double-quote a string to make it a valid json string