fix(runtime-core): fix component public instance has check for accessed non-existent properties
close #4962
This commit is contained in:
		
							parent
							
								
									89b2f924fc
								
							
						
					
					
						commit
						aac0466cb8
					
				@ -195,6 +195,11 @@ describe('component: proxy', () => {
 | 
				
			|||||||
    expect('$foobar' in instanceProxy).toBe(false)
 | 
					    expect('$foobar' in instanceProxy).toBe(false)
 | 
				
			||||||
    expect('baz' in instanceProxy).toBe(false)
 | 
					    expect('baz' in instanceProxy).toBe(false)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // #4962 triggering getter should not cause non-existent property to
 | 
				
			||||||
 | 
					    // pass the has check
 | 
				
			||||||
 | 
					    instanceProxy.baz
 | 
				
			||||||
 | 
					    expect('baz' in instanceProxy).toBe(false)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // set non-existent (goes into proxyTarget sink)
 | 
					    // set non-existent (goes into proxyTarget sink)
 | 
				
			||||||
    instanceProxy.baz = 1
 | 
					    instanceProxy.baz = 1
 | 
				
			||||||
    expect('baz' in instanceProxy).toBe(true)
 | 
					    expect('baz' in instanceProxy).toBe(true)
 | 
				
			||||||
 | 
				
			|||||||
@ -248,11 +248,11 @@ if (__COMPAT__) {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const enum AccessTypes {
 | 
					const enum AccessTypes {
 | 
				
			||||||
 | 
					  OTHER,
 | 
				
			||||||
  SETUP,
 | 
					  SETUP,
 | 
				
			||||||
  DATA,
 | 
					  DATA,
 | 
				
			||||||
  PROPS,
 | 
					  PROPS,
 | 
				
			||||||
  CONTEXT,
 | 
					  CONTEXT
 | 
				
			||||||
  OTHER
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export interface ComponentRenderContext {
 | 
					export interface ComponentRenderContext {
 | 
				
			||||||
@ -437,7 +437,7 @@ export const PublicInstanceProxyHandlers: ProxyHandler<any> = {
 | 
				
			|||||||
  ) {
 | 
					  ) {
 | 
				
			||||||
    let normalizedProps
 | 
					    let normalizedProps
 | 
				
			||||||
    return (
 | 
					    return (
 | 
				
			||||||
      accessCache![key] !== undefined ||
 | 
					      !!accessCache![key] ||
 | 
				
			||||||
      (data !== EMPTY_OBJ && hasOwn(data, key)) ||
 | 
					      (data !== EMPTY_OBJ && hasOwn(data, key)) ||
 | 
				
			||||||
      (setupState !== EMPTY_OBJ && hasOwn(setupState, key)) ||
 | 
					      (setupState !== EMPTY_OBJ && hasOwn(setupState, key)) ||
 | 
				
			||||||
      ((normalizedProps = propsOptions[0]) && hasOwn(normalizedProps, key)) ||
 | 
					      ((normalizedProps = propsOptions[0]) && hasOwn(normalizedProps, key)) ||
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user