This is an automated email from the ASF dual-hosted git repository.

vogievetsky pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/druid.git


The following commit(s) were added to refs/heads/master by this push:
     new 6e222d47c81 fix crash when parsing data in data loader that can not be 
parsed (#15983)
6e222d47c81 is described below

commit 6e222d47c81623ceb22d8a8b15c7ab44aa8e483d
Author: Vadim Ogievetsky <[email protected]>
AuthorDate: Wed Feb 28 14:37:24 2024 -0800

    fix crash when parsing data in data loader that can not be parsed (#15983)
---
 web-console/src/utils/object-change.spec.ts | 21 ++++++++++++++++++++-
 web-console/src/utils/object-change.ts      |  5 +++--
 web-console/src/utils/sampler.ts            |  2 +-
 3 files changed, 24 insertions(+), 4 deletions(-)

diff --git a/web-console/src/utils/object-change.spec.ts 
b/web-console/src/utils/object-change.spec.ts
index bdfecca7ec1..547d8815926 100644
--- a/web-console/src/utils/object-change.spec.ts
+++ b/web-console/src/utils/object-change.spec.ts
@@ -18,7 +18,15 @@
 
 import * as JSONBig from 'json-bigint-native';
 
-import { deepDelete, deepExtend, deepGet, deepSet, makePath, parsePath } from 
'./object-change';
+import {
+  allowKeys,
+  deepDelete,
+  deepExtend,
+  deepGet,
+  deepSet,
+  makePath,
+  parsePath,
+} from './object-change';
 
 describe('object-change', () => {
   describe('parsePath', () => {
@@ -36,6 +44,17 @@ describe('object-change', () => {
     });
   });
 
+  describe('allowKeys', () => {
+    it('works with bad objects', () => {
+      expect(allowKeys(null, ['a', 'b', 'c'] as any)).toEqual(null);
+      expect(allowKeys(undefined as any, ['a', 'b', 'c'] as 
any)).toEqual(undefined);
+    });
+
+    it('works in a normal case', () => {
+      expect(allowKeys({ a: 1, z: 4 }, ['a', 'b', 'c'] as any)).toEqual({ a: 1 
});
+    });
+  });
+
   describe('deepGet', () => {
     const thing = {
       hello: {
diff --git a/web-console/src/utils/object-change.ts 
b/web-console/src/utils/object-change.ts
index 9b29cda5dbf..9eeb8a4b6e9 100644
--- a/web-console/src/utils/object-change.ts
+++ b/web-console/src/utils/object-change.ts
@@ -160,9 +160,10 @@ export function deepExtend<T extends Record<string, 
any>>(target: T, diff: Recor
 }
 
 export function allowKeys<T>(obj: T, keys: (keyof T)[]): T {
-  const newObj: T = {} as any;
+  if (!obj || typeof obj !== 'object') return obj;
+  const newObj = {} as T;
   for (const key of keys) {
-    if (Object.prototype.hasOwnProperty.call(obj, key)) {
+    if (Object.hasOwn(obj, key)) {
       newObj[key] = obj[key];
     }
   }
diff --git a/web-console/src/utils/sampler.ts b/web-console/src/utils/sampler.ts
index 6c31f2bb2b6..8b1d25320b7 100644
--- a/web-console/src/utils/sampler.ts
+++ b/web-console/src/utils/sampler.ts
@@ -134,7 +134,7 @@ export interface SampleEntry {
 export function getCacheRowsFromSampleResponse(sampleResponse: 
SampleResponse): CacheRows {
   return filterMap(sampleResponse.data, d => ({
     ...d.input,
-    ...allowKeys<any>(d.parsed, ALL_POSSIBLE_SYSTEM_FIELDS),
+    ...allowKeys<any>(d.parsed || {}, ALL_POSSIBLE_SYSTEM_FIELDS),
   })).slice(0, 20);
 }
 


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to