IP Library Granted Patent US 11,249,877
Granted Patent B2
US 11,249,877 · App. 16/460,828 · Granted Feb 15, 2022

Techniques for traversing representations of source code

Inventor: Eric Sheridan (Summerfield, NC)
Assignee: NTT SECURITY APPSEC SOLUTIONS INC.
G06F11/3604
View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 11,249,877
App. No.
16/460,828
Granted
Feb 15, 2022
Kind
B2
Abstract

Methods, apparatus, and systems for traversing a representation of an application source code are disclosed. Steps for traversing the representation include beginning to traverse the representation, monitoring a history of the traverse, and continuing to traverse the representation based on the history of the traverse. Continuing to traverse the representation may include identifying a plurality of concrete implementations of a method invocation and traversing less than all of the concrete implementations, the concrete implementations being traversed being selected based on the history of the traverse.

Claims (53)

1. A method for determining a concrete implementation to traverse in a representation of source code without executing the source code, the representation including a plurality of nodes, the method comprising:

selecting an entry point in the representation of source code;

identifying, in the representation of source code, a method invocation from the entry point;

determining whether the method invocation in the representation is marked with runtime binding rule;

in response to the method invocation not being marked with the runtime binding rule, determining whether there is more than one concrete implementation of the method invocation;

in response to the method invocation having more than one concrete implementation, determining whether any classes in a stack are an instance of one or more classes of the more than one concrete implementation, wherein the stack includes at least a history of concrete implementations previously traversed;

in response to at least one class in the stack being the instance of the one or more classes of the more than one concrete implementation, searching the at least one class for the concrete implementation to traverse to identify one or more vulnerabilities; and

in response to identifying the concrete implementation to traverse, traversing the concrete implementation in the representation without executing the source code to identify the one or more vulnerabilities, the concrete implementations in the representation include at least two nodes of the plurality of nodes.

2. The method of claim 1 , further comprising:

in response to the method invocation being marked with the runtime binding rule, traversing one or more concrete implementations referenced in the runtime binding rule.

3. The method of claim 1 , further comprising:

in response to there not being more than one concrete implementation of the method invocation, traversing the one concrete implementation of the method invocation.

4. The method of claim 1 , further comprising:

in response to determining that none of the classes in the stack are the instance of the one or more classes of the more than one concrete implementation, traversing each of the more than one concrete implementation.

5. The method of claim 1 , further comprising:

in response to not identifying the concrete implementation, traversing each of the more than one concrete implementation.

6. The method of claim 1 , wherein the concrete implementation to traverse is an earliest-pushed or sub-most class on the stack that includes the concrete implementation to traverse.

7. A system for determining a concrete implementation to traverse in a representation of source code without executing the source code, the representation including a plurality of nodes, the system comprising:

at least one processor; and

at least one memory storing instructions, which when executed by the at least one processor, causes the at least one processor to:

select an entry point in the representation of source code;

identify, in the representation of source code, a method invocation from the entry point;

determine whether the method invocation in the representation is marked with runtime binding rule;

in response to the method invocation not being marked with the runtime binding rule, determine whether there is more than one concrete implementation of the method invocation;

in response to the method invocation having more than one concrete implementation, determine whether any classes in a stack are an instance of one or more classes of the more than one concrete implementation, wherein the stack includes at least a history of concrete implementations previously traversed;

in response to at least one class in the stack being the instance of the one or more classes of the more than one concrete implementation, search the at least one class for the concrete implementation to traverse to identify one or more vulnerabilities; and

in response to identifying the concrete implementation to traverse, traverse the concrete implementation in the representation without executing the source code to identify the one or more vulnerabilities, the concrete implementations in the representation include at least two nodes of the plurality of nodes.

8. The system of claim 7 , further comprising instructions which when executed by the at least one processor, causes the at least one processor to:

in response to the method invocation being marked with the runtime binding rule, traverse one or more concrete implementations referenced in the runtime binding rule.

9. The system of claim 7 , further comprising instructions which when executed by the at least one processor, causes the at least one processor to:

in response to there not being more than one concrete implementation of the method invocation, traverse the one concrete implementation of the method invocation.

10. The system of claim 7 , further comprising instructions which when executed by the at least one processor, causes the at least one processor to:

in response to determining that none of the classes in the stack are the instance of the one or more classes of the more than one concrete implementation, traverse each of the more than one concrete implementation.

11. The system of claim 7 , further comprising instructions which when executed by the at least one processor, causes the at least one processor to:

in response to not identifying the concrete implementation, traverse each of the more than one concrete implementation.

12. The system of claim 7 , wherein the concrete implementation to traverse is an earliest-pushed or sub-most class on the stack that includes the concrete implementation to traverse.

13. At least one non-transitory computer readable medium storing instructions, which when executed by at least one processor, causes the at least one processor to:

select an entry point in the representation of source code;

identify, in the representation of source code, a method invocation from the entry point;

determine whether the method invocation in a representation of source code is marked with runtime binding rule, the representation including a plurality of nodes;

in response to the method invocation not being marked with the runtime binding rule, determine whether there is more than one concrete implementation of the method invocation;

in response to the method invocation having more than one concrete implementation, determine whether any classes in a stack are an instance of one or more classes of the more than one concrete implementation, wherein the stack includes at least a history of concrete implementations previously traversed;

in response to at least one class in the stack being the instance of the one or more classes of the more than one concrete implementation, search the at least one class for the concrete implementation to traverse to identify one or more vulnerabilities; and

in response to identifying the concrete implementation to traverse, traverse the concrete implementation in the representation without executing the source code to identify the one or more vulnerabilities, the concrete implementations in the representation include at least two nodes of the plurality of nodes.

14. The at least one non-transitory computer readable medium of claim 13 , further comprising instructions which when executed by the at least one processor, causes the at least one processor to:

in response to the method invocation being marked with the runtime binding rule, traverse one or more concrete implementations referenced in the runtime binding rule.

15. The at least one non-transitory computer readable medium of claim 13 , further comprising instructions which when executed by the at least one processor, causes the at least one processor to:

in response to there not being more than one concrete implementation of the method invocation, traverse the one concrete implementation of the method invocation.

16. The at least one non-transitory computer readable medium of claim 13 , further comprising instructions which when executed by the at least one processor, causes the at least one processor to:

in response to determining that none of the classes in the stack are the instance of the one or more classes of the more than one concrete implementation, traverse each of the more than one concrete implementation.

17. The at least one non-transitory computer readable medium of claim 13 , further comprising instructions which when executed by the at least one processor, causes the at least one processor to:

in response to not identifying the concrete implementation, traverse each of the more than one concrete implementation.

18. The at least one non-transitory computer readable medium of claim 13 , wherein the concrete implementation to traverse is an earliest-pushed or sub-most class on the stack that includes the concrete implementation to traverse.

Assignments (7)
SECURITY INTEREST Recorded Sep 30, 2024
From: BLACK DUCK SOFTWARE, INC.
To: ARES CAPITAL CORPORATION, AS COLLATERAL AGENT
Reel/Frame 069083/0149 →
CHANGE OF NAME Recorded Jul 30, 2024
From: SOFTWARE INTEGRITY GROUP, INC.
To: BLACK DUCK SOFTWARE, INC.
Reel/Frame 068191/0490 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Feb 23, 2024
From: SYNOPSYS, INC.
To: SOFTWARE INTEGRITY GROUP, INC.
Reel/Frame 066664/0821 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Aug 2, 2022
From: SYNOPSYS SOFTWARE INTEGRITY SOLUTIONS, INC.
To: SYNOPSYS, INC.
Reel/Frame 060698/0193 →
CHANGE OF NAME Recorded Jul 25, 2022
From: NTT SECURITY APPSEC SOLUTIONS INC.
To: SYNOPSYS SOFTWARE INTEGRITY SOLUTIONS, INC.
Reel/Frame 060884/0443 →
CHANGE OF NAME Recorded Oct 6, 2021
From: WHITEHAT SECURITY, INC.
To: NTT SECURITY APPSEC SOLUTIONS INC.
Reel/Frame 057726/0261 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded May 26, 2021
From: SHERIDAN, ERIC
To: WHITEHAT SECURITY, INC.
Reel/Frame 056351/0954 →