Fix object metadata section crash due to un escaped characters (#2928)

This commit is contained in:
Prakash Senthil Vel
2023-07-07 23:51:06 +05:30
committed by GitHub
parent b975871e9d
commit 420ed00f55
2 changed files with 18 additions and 8 deletions

View File

@@ -509,3 +509,12 @@ export const replaceUnicodeChar = (inputString: string): string => {
let unicodeChar = "\u202E"; let unicodeChar = "\u202E";
return inputString.split(unicodeChar).join("<<3C>202e>"); return inputString.split(unicodeChar).join("<<3C>202e>");
}; };
// unescaped characters might throw error like '%'
export const safeDecodeURIComponent = (value: any) => {
try {
return decodeURIComponent(value);
} catch (err) {
return value;
}
};

View File

@@ -24,6 +24,7 @@ import {
detailsPanel, detailsPanel,
spacingUtils, spacingUtils,
} from "../../../../Common/FormComponents/common/styleLibrary"; } from "../../../../Common/FormComponents/common/styleLibrary";
import { safeDecodeURIComponent } from "../../../../../../common/utils";
interface IObjectMetadata { interface IObjectMetadata {
metaData: any; metaData: any;
@@ -40,6 +41,12 @@ const styles = (theme: Theme) =>
...detailsPanel, ...detailsPanel,
}); });
const itemRendererFn = (element: any) => {
return Array.isArray(element)
? element.map(safeDecodeURIComponent).join(", ")
: safeDecodeURIComponent(element);
};
const ObjectMetaData = ({ const ObjectMetaData = ({
metaData, metaData,
classes, classes,
@@ -51,10 +58,7 @@ const ObjectMetaData = ({
return ( return (
<Fragment> <Fragment>
{metaKeys.map((element: string, index: number) => { {metaKeys.map((element: string, index: number) => {
const renderItem = Array.isArray(metaData[element]) const renderItem = itemRendererFn(metaData[element]);
? metaData[element].map(decodeURIComponent).join(", ")
: decodeURIComponent(metaData[element]);
return ( return (
<Box <Box
className={classes.metadataLinear} className={classes.metadataLinear}
@@ -94,10 +98,7 @@ const ObjectMetaData = ({
<Table className={classes.table} aria-label="simple table"> <Table className={classes.table} aria-label="simple table">
<TableBody> <TableBody>
{metaKeys.map((element: string, index: number) => { {metaKeys.map((element: string, index: number) => {
const renderItem = Array.isArray(metaData[element]) const renderItem = itemRendererFn(metaData[element]);
? metaData[element].map(decodeURIComponent).join(", ")
: decodeURIComponent(metaData[element]);
return ( return (
<TableRow key={`tRow-${index.toString()}`}> <TableRow key={`tRow-${index.toString()}`}>
<TableCell <TableCell