Skip to content

Commit 420ed00

Browse files
authored
Fix object metadata section crash due to un escaped characters (#2928)
1 parent b975871 commit 420ed00

File tree

2 files changed

+18
-8
lines changed

2 files changed

+18
-8
lines changed

portal-ui/src/common/utils.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -509,3 +509,12 @@ export const replaceUnicodeChar = (inputString: string): string => {
509509
let unicodeChar = "\u202E";
510510
return inputString.split(unicodeChar).join("<�202e>");
511511
};
512+
513+
// unescaped characters might throw error like '%'
514+
export const safeDecodeURIComponent = (value: any) => {
515+
try {
516+
return decodeURIComponent(value);
517+
} catch (err) {
518+
return value;
519+
}
520+
};

portal-ui/src/screens/Console/Buckets/ListBuckets/Objects/ObjectDetails/ObjectMetaData.tsx

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import {
2424
detailsPanel,
2525
spacingUtils,
2626
} from "../../../../Common/FormComponents/common/styleLibrary";
27+
import { safeDecodeURIComponent } from "../../../../../../common/utils";
2728

2829
interface IObjectMetadata {
2930
metaData: any;
@@ -40,6 +41,12 @@ const styles = (theme: Theme) =>
4041
...detailsPanel,
4142
});
4243

44+
const itemRendererFn = (element: any) => {
45+
return Array.isArray(element)
46+
? element.map(safeDecodeURIComponent).join(", ")
47+
: safeDecodeURIComponent(element);
48+
};
49+
4350
const ObjectMetaData = ({
4451
metaData,
4552
classes,
@@ -51,10 +58,7 @@ const ObjectMetaData = ({
5158
return (
5259
<Fragment>
5360
{metaKeys.map((element: string, index: number) => {
54-
const renderItem = Array.isArray(metaData[element])
55-
? metaData[element].map(decodeURIComponent).join(", ")
56-
: decodeURIComponent(metaData[element]);
57-
61+
const renderItem = itemRendererFn(metaData[element]);
5862
return (
5963
<Box
6064
className={classes.metadataLinear}
@@ -94,10 +98,7 @@ const ObjectMetaData = ({
9498
<Table className={classes.table} aria-label="simple table">
9599
<TableBody>
96100
{metaKeys.map((element: string, index: number) => {
97-
const renderItem = Array.isArray(metaData[element])
98-
? metaData[element].map(decodeURIComponent).join(", ")
99-
: decodeURIComponent(metaData[element]);
100-
101+
const renderItem = itemRendererFn(metaData[element]);
101102
return (
102103
<TableRow key={`tRow-${index.toString()}`}>
103104
<TableCell

0 commit comments

Comments
 (0)