Patentable/Patents/US-8799874
US-8799874

Static analysis of computer software applications

PublishedAugust 5, 2014
Assigneenot available in USPTO data we have
Inventorsnot available in USPTO data we have
Technical Abstract

Static analysis of a computer software application can be performed by applying a first level of abstraction to model a plurality of run-time objects, thereby producing a set of object abstractions. Static data-flow analysis of the computer software application can be performed using the set of object abstractions, thereby producing a first data-flow propagation graph. A data-flow bottleneck can be identified within the data-flow propagation graph. A second level of abstraction can be applied to model any of the run-time objects having in the set of object abstractions a corresponding object abstraction that is traceable to the data-flow bottleneck. The applying the second level of abstraction can decompose the corresponding object abstraction into a set of object abstractions, thereby modifying the set of object abstractions. Static data-flow analysis of the computer software application can be performed using the modified set of object abstractions.

Patent Claims
19 claims

Legal claims defining the scope of protection, as filed with the USPTO.

1

1. A computer-implemented method comprising: a computer applying a first level of abstraction to model a plurality of run-time objects of a computer software application to produce a set of object abstractions of the run-time objects; the computer producing a first data-flow propagation graph using the set of object abstractions; the computer identifying a data-flow bottleneck at control locations within the first data-flow propagation graph; the computer applying a second level of abstraction to model any of the said run-time objects which are identified as created or returned by factory methods and having in the set of object abstractions a corresponding object abstraction that is traceable to the data-flow bottleneck, based on corresponding allocation sites and call sites that call factory methods encompassing the corresponding allocation sites, where applying the second level of abstraction decomposes the corresponding object abstraction into a plurality of object abstractions, thereby producing a modified set of object abstractions; the computer performing static data-flow analysis of the computer software application using the modified set of object abstractions; the computer invocating one of the factory methods at least two times, comprising a first invocation and a second invocation; the computer performing the first invocation using an untrusted argument; the computer performing the second invocation without using an untrusted argument, wherein if a static security analysis were performed using a data-flow propagation graph from the first invocation and the second invocation without using the modified set of object abstractions, a false positive report of a security vulnerability would result assuming that by default the statistic security analysis conservatively views two instances as being one for a same abstract object, wherein said method avoids the false positive report by modeling the factory method by applying a further level of abstraction, as opposed to modeling the factory method as a single abstract object.

2

2. The method of claim 1 , where the identifying comprises identifying where the data-flow bottleneck is traceable to an object abstraction of a run-time object allocated by an allocation statement within the factory method, where a value defined by the allocation statement is returned by the factory method.

3

3. The method of claim 1 where the performing static data-flow analysis of the computer software application using the modified set of object abstractions comprises modifying the data-flow propagation graph, and further comprising iteratively performing the identifying, applying, and performing the static data-flow analysis using the modified set of object abstractions until a termination condition is met.

4

4. The method of claim 3 where the termination condition is met: when a predefined number of iterations greater than two is reached, when no additional data-flow bottlenecks are identified in the data-flow propagation graph, or when two successive versions of the data-flow propagation graph are identical.

5

5. The method of claim 1 , wherein the factory methods are written in one or more object-oriented programming languages, wherein the factory methods create instances of a particular class or type sub-hierarchy, wherein each of the factory methods has multiple invocations, where each of the multiple invocations represents a different control flow path that results in a different instance of the same class, wherein use of the set of object abstractions for the static data flow analysis prevents problems with incorrect status analysis from a first invocation of the factory methods using an untrusted argument and a second invocation of the factory methods not using an untrusted argument.

6

6. The method of claim 1 where the performing static data-flow analysis of the computer software application using the modified set of object abstractions comprises replacing the data-flow propagation graph with a new data-flow propagation graph.

7

7. The method of claim 6 where the termination condition is met when a predefined number of iterations greater than two is reached.

8

8. The method of claim 6 where the termination condition is met when no additional data-flow bottlenecks are identified in the data-flow propagation graph.

9

9. The method of claim 6 where the termination condition is met when two successive versions of the data-flow propagation graph are identical.

10

10. The method of claim 1 where the applying, performing, and identifying are implemented in at least one of a) computer hardware, and b) computer software embodied in a non-transitory, computer-readable storage medium.

11

11. The method of claim 1 wherein the producing comprises producing the first data-flow propagation graph having nodes that represent control locations within the computer software application, and edges that represent data flow across the control locations.

12

12. The method of claim 11 wherein the identifying comprises identifying the data-flow bottleneck at control locations within the data-flow propagation graph.

13

13. The method of claim 2 wherein the identifying comprises identifying whether the data-flow bottleneck is due to an allocation statement.

14

14. The method of claim 2 where the applying comprises iteratively applying abstractions to model a run-time object whose abstraction is traceable to the identified data-flow bottleneck until a predefined termination condition is met.

15

15. A method comprising: a computer invocating one of a plurality of factory methods at least two times, comprising a first invocation and a second invocation; the computer performing the first invocation using an untrusted argument; the computer performing the second invocation without using an untrusted argument wherein if a static security analysis were performed using a data-flow propagation graph from the first invocation and the second invocation without using the modified set of object abstractions, a false positive report of a security vulnerability would result assuming that by default the statistic security analysis conservatively views two instances as being one for a same abstract object, wherein said method avoids the false positive report by modeling the factory method by applying a further level of abstraction, as opposed to modeling the factory method as a single abstract object; responsive to the first and the second invocating, the computer applying a first level of abstraction to model a plurality of run-time objects of a computer software application to produce a set of object abstractions of the run-time objects for the one factory method; the computer producing a first data-flow propagation graph using the set of object abstractions; the computer identifying a data-flow bottleneck at control locations within the first data-flow propagation graph; the computer determining whether the data-flow bottleneck is traceable to an abstraction of run-time objects; the computer applying a second level of abstraction to model any of the said run-time objects which are identified as created or returned by factory methods and having in the set of object abstractions a corresponding object abstraction that is traceable to the data-flow bottleneck, based on corresponding allocation sites and call sites that call factory methods encompassing the corresponding allocation sites, where applying the second level of abstraction decomposes the corresponding object abstraction into a plurality of object abstractions, thereby producing a modified set of object abstractions wherein use of the first and second levels of abstractions avoids a false-positive report of a security vulnerability from being generated by a static data-flow analysis of the computer software application; and the computer performing static data-flow analysis of the computer software application using the modified set of object abstractions to replace the data-flow propagation graph with a modified data flow propagation graph.

16

16. The method of claim 15 wherein the performing static data-flow analysis of the computer software application using the modified set of object abstractions until a termination condition is met.

17

17. The method of claim 16 where the termination condition is met when no additional data-flow bottlenecks are identified in the data-flow propagation graph.

18

18. A method comprising: a computer applying a first level of abstraction to model a plurality of run-time objects of a computer software application to produce a set of object abstractions of the run-time objects; the computer producing a first data-flow propagation graph using the set of object abstractions; the computer identifying a data-flow bottleneck at control locations within the first data-flow propagation graph; the computer applying a second level of abstraction to model any of the said run-time objects which are identified as created or returned by factory methods and having in the set of object abstractions a corresponding object abstraction that is traceable to the data-flow bottleneck, based on corresponding allocation sites and call sites that call factory methods encompassing the corresponding allocation sites, where applying the second level of abstraction decomposes the corresponding object abstraction into a plurality of object abstractions, thereby producing a modified set of object abstractions; the computer determining whether the data-flow bottleneck is traceable to an abstraction of run-time objects; the computer applying a second level of abstraction to model any of the run-time objects of which abstractions which are identified as created or returned by factory methods and having in the set of object abstractions a corresponding object abstraction that is traceable to the data-flow bottleneck, based on corresponding allocation sites and call sites that call factory methods encompassing the corresponding allocation sites, where applying the second level of abstraction decomposes the corresponding object abstraction into a plurality of object abstractions, thereby producing a modified set of object abstractions; the computer performing static data-flow analysis of the computer software application using the modified set of object abstractions to produce a second data-flow propagation graph, wherein the first data-flow propagation graph is replaced by the second data-flow propagation graph; the computer invocating one of the factory methods at least two times, comprising a first invocation and a second invocation; the computer performing the first invocation using an untrusted argument; the computer performing the second invocation without using an untrusted argument, wherein if a static security analysis were performed using a data-flow propagation graph from the first invocation and the second invocation without using the modified set of object abstractions, a false positive report of a security vulnerability would result assuming that by default the statistic security analysis conservatively views two instances as being one for a same abstract object, wherein said method avoids the false positive report by modeling the factory method by applying a further level of abstraction, as opposed to modeling the factory method as a single abstract object.

19

19. The method of claim 18 , further comprising iteratively performing the identifying, applying, and performing the static data-flow analysis using the modified set of object abstractions until a termination condition is met.

Classification Codes (CPC)

Cooperative Patent Classification codes for this invention. Click any code to explore related patents in that topic.

Patent Metadata

Filing Date

March 5, 2012

Publication Date

August 5, 2014

Want to explore more patents?

Browse 5M+ US patents with plain-English claim translations and AI-generated analysis.

Citation & reuse

Analysis on this page is generated by Patentable — an AI-powered patent intelligence platform. AI-generated summaries, explanations, and analysis may be reused with attribution and a visible link back to the canonical URL below. Patent abstracts and claims are USPTO public domain.

Cite as: Patentable. “Static analysis of computer software applications” (US-8799874). https://patentable.app/patents/US-8799874

© 2026 Patentable. All rights reserved.

Patentable is a research and drafting-assistant tool, not a law firm, and does not provide legal advice. Documents we generate are drafts for review by a licensed patent attorney.