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]