Prosecution Insights
Last updated: October 26, 2026
Application No. 18/667,376

ADAPTIVE BACKTRACKING DEPTH LIMIT FOR NON-DETERMINISTIC FINITE AUTOMATON IMPLEMENTATIONS

Non-Final OA §103
Filed
May 17, 2024
Examiner
SHARPLESS, SAMUEL
Art Unit
2165
Tech Center
2100 — Computer Architecture & Software
Assignee
Microsoft Technology Licensing, LLC
OA Round
3 (Non-Final)
81%
Grant Probability
Favorable
3-4
OA Rounds
6m
Est. Remaining
99%
With Interview

Examiner Intelligence

Grants 81% — above average
81%
Career Allowance Rate
118 granted / 146 resolved
+25.8% vs TC avg
Strong +29% interview lift
Without
With
+29.3%
Interview Lift
resolved cases with interview
Typical timeline
2y 11m
Avg Prosecution
8 currently pending
Career history
162
Total Applications
across all art units

Statute-Specific Performance

§101
12.4%
-27.6% vs TC avg
§103
56.9%
+16.9% vs TC avg
§102
20.2%
-19.8% vs TC avg
§112
6.1%
-33.9% vs TC avg
Black line = Tech Center average estimate • Based on career data from 146 resolved cases

Office Action

§103
DETAILED ACTION Notice of Pre-AIA or AIA Status The present application, filed on or after March 16, 2013, is being examined under the first inventor to file provisions of the AIA . In view of the Pre-Appeal Brief Conference filed on 04/02/2026, PROSECUTION IS HEREBY REOPENED. A new prior art rejection under 35 U.S.C. 103 is set forth below. To avoid abandonment of the application, appellant must exercise one of the following two options: (1) file a reply under 37 CFR 1.111 (if this Office action is non-final) or a reply under 37 CFR 1.113 (if this Office action is final); or, (2) initiate a new appeal by filing a notice of appeal under 37 CFR 41.31 followed by an appeal brief under 37 CFR 41.37. The previously paid notice of appeal fee and appeal brief fee can be applied to the new appeal. If, however, the appeal fees set forth in 37 CFR 41.20 have been increased since they were previously paid, then appellant must pay the difference between the increased fees and the amount previously paid. A Supervisory Patent Examiner (SPE) has approved of reopening prosecution by signing below: [4] Response to Arguments Applicant’s arguments, see pages 1-5, filed 04/02/2026, with respect to the rejection(s) of claim(s) 1 and 4-22 under 35 U.S.C. 103 have been fully considered and are persuasive. Therefore, the rejection has been withdrawn. However, upon further consideration, a new ground(s) of rejection is made in view of Goyal et al (US 2015/0066927) in view of Berglund et al (Analyzing Catastrophic Backtracking Behavior in Practical Regular Expression Matching). Berglund teaches the limitation regarding the backtracking counter. Claim Rejections - 35 USC § 103 The following is a quotation of 35 U.S.C. 103 which forms the basis for all obviousness rejections set forth in this Office action: A patent for a claimed invention may not be obtained, notwithstanding that the claimed invention is not identically disclosed as set forth in section 102, if the differences between the claimed invention and the prior art are such that the claimed invention as a whole would have been obvious before the effective filing date of the claimed invention to a person having ordinary skill in the art to which the claimed invention pertains. Patentability shall not be negated by the manner in which the invention was made. Claim(s) 1-13 is/are rejected under 35 U.S.C. 103 as being unpatentable over Goyal et al (US 2015/0066927) in view of Berglund et al (Analyzing Catastrophic Backtracking Behavior in Practical Regular Expression Matching). Regarding claim 1, Goyal discloses: 1. (Original) A method comprising: as part of a match attempt between a regular expression (regex) pattern and a payload, a non-deterministic finite automaton (NFA) instance executing instructions for an NFA graph having a plurality of nodes linked via arcs indicative of transitions among states of the NFA instance ([0090] Typically, content aware application processing uses either a deterministic finite automata (DFA) or a non-deterministic finite automata (NFA) to recognize a pattern in the content of a received packet. The DFA and NFA are both finite state machines, that is, models of computation each including a set of states, a start-state, an input alphabet (set of all possible symbols) and a transition function. Computation begins in the start-state and changes to new states dependent on the transition function.); during execution of the instructions for the NFA graph, using a backtrack- depth counter counting a number of times a current state of the NFA graph has been previously visited during the match attempt between the regex pattern and the payload. Goyal does not explicitly teach allowing the NFA instance to keep a record of number of times backtracking has occurred during the match attempt; andto ensure that malicious strinq matching does not result in a successful denial of service attack, upon the backtrack-depth counter for the NFA instance reaching or exceeding an adaptive backtracking depth limit for the NFA instance, terminating the match attempt between the regex pattern and the payload. Berglund teaches allowing the NFA instance to keep a record of number of times backtracking has occurred during the match attempt; andto ensure that malicious strinq matching does not result in a successful denial of service attack, upon the backtrack-depth counter for the NFA instance reaching or exceeding an adaptive backtracking depth limit for the NFA instance, terminating the match attempt between the regex pattern and the payload. (pg 118 – section 5.1 An Upper Bound on the Complexity of General Backtracking Analysis Let us first establish an upper bound on the complexity of general backtracking analysis. We will give an algorithm which solves this problem in EXPTIME. Afterwards, we will also note some minor hardness results. The EXPTIME decision procedure relies heavily on a result from [4]. Lemma 7. Given a string-to-tree transducer stt = (Q,Σ,Γ,q0,δ), it is decidable in deterministic expo nential time whether the function f(n) = max{|t| | t ∈ stt(s), s ∈ Σ∗, |s| ≤ n} grows exponentially, i.e. whether f ∈ 2Ω(n). In short, we will hereafter construct a string-to-tree transducer from a pNFA A which reads an input string (suitably decorated) and outputs the corresponding backtracking run of A (see Definition 3). In this way, wemodeltherunningofAlgorithm 4onthat string. Then Lemma7canbeappliedtothis transducer to decide exponential backtracking. To simplify the construction we first make a small adjustment to the input pNFA in the form of a “flattening”, which ensures that δ2 maps Q2 to Q∗ 1. That is, we remove the opportunity for repeated ε-transitions.) Accordingly, it would have been obvious to one of ordinary skill in the art before the effective filing date of the claimed invention to have modified the teachings of Goyal to include allowing the NFA instance to keep a record of number of times backtracking has occurred during the match attempt; andto ensure that malicious strinq matching does not result in a successful denial of service attack, upon the backtrack-depth counter for the NFA instance reaching or exceeding an adaptive backtracking depth limit for the NFA instance, terminating the match attempt between the regex pattern and the payload as taught by Berglund. It would be advantageous system stability by avoiding erroneoruos repetition loops as taught by Bergulund [0023]. Regarding claim 2, Goyal in view of Berglund teaches The method of claim 1, Goyal further teaches further comprising: (1) during backtracking storing intermediate matches between the regex pattern and the payload, and (2) during a second match attempt, subsequent to a termination of the match attempt, backtracking only to a previous successful partial match between the regex pattern and the payload ([0126] The graph walk engine first processes Node N0 402. If the payload is “a,” the graph walk engine loads Node N1 404. The graph walk engine then processes the next segment of the payload. If the payload is ‘b’, the graph walk engine loads Node N3 408, which is a marked node. If the payload is ‘B,’ the graph walk engine loads Node N4 410, which is also a marked node. Both marked nodes instruct the graph walk engine to return a match.). Regarding claim 3, Goyal in view of Berglund teaches The method of claim 1, Goyal further teaches further comprising: (1) using a first instruction counter tracking a first number of the instructions executed by the NFA instance prior to a successful match between the regex pattern and the payload, (2) using a second instruction counter tracking a second number of instructions executed by the NFA instance prior to termination of the match attempt between the regex pattern and the payload. ([0130] When the graph walk engine is matching a payload segment to a character class, it can use the ASCII value of the payload as an index to the character class. For example, where the character class is [a-z], assume the graph walk engine is processing the letter “r,” which has an ASCII value of 114. The graph walk engine can access the 114th bit of the character class and determine whether it is set to determine whether it matches the character class. This can be expressed with the following logical statement: “if (CharacterClass[PayLoadASCIIValue] true), return match; else return nomatch,” where PayLoadASCIIValue is the ASCII value of the current segment of the payload, or in this case, 114.) Regarding claim 4, Goyal in view of Berglund teaches The method of claim 1, Goyal further teaches further comprising for each successful match attempt or a failed match attempt between a regex pattern and a payload storing a result. ([0131] A given pattern can also include multiple character classes. For example, the pattern “[a-z][0-9][̂\n][a-z]” has four character classes but only three unique character classes (i.e., [a-z], [0-9], and [̂\n]) because [a-z] is a repeated character class. So, compiler first determines the number of unique character classes present in the pattern(s). The compiler then assigns each character class a unique number (e.g., an index or identifier). For example, the compiler assigns [a-z] an index of 1, [0-9] an index of 2, and [̂\n] an index of 3. Even though it appears twice, the character class [a-z] is stored as a bitmap once, and can be accessed by its index of “1.”) Regarding claim 5, Goyal in view of Berglund teaches The method of claim 1, Goyal further teaches further comprising maintaining in a memory associated with the NFA instance: (1) stack entries for instructions being executed for the NFA graph and (2) a hash value for each of the stack entries. ([0131] A given pattern can also include multiple character classes. For example, the pattern “[a-z][0-9][̂\n][a-z]” has four character classes but only three unique character classes (i.e., [a-z], [0-9], and [̂\n]) because [a-z] is a repeated character class. So, compiler first determines the number of unique character classes present in the pattern(s). The compiler then assigns each character class a unique number (e.g., an index or identifier). For example, the compiler assigns [a-z] an index of 1, [0-9] an index of 2, and [̂\n] an index of 3. Even though it appears twice, the character class [a-z] is stored as a bitmap once, and can be accessed by its index of “1.”) Regarding claim 6, Goyal in view of Berglund teaches The method of claim 5, Goyal further teaches wherein counting the number of times the current state of the NFA graph has been previously visited during the match attempt between the regex pattern and the payload comprises counting a number of matches between a hash value for a given stack entry and any hash values of stack entries previously pushed to a top of a stack for instructions being executed by the NFA instance. ([0156] The graph walk engine, upon pushing the run stack entry, fetches the next node N1 504. The graph walk engine fetches the next byte of the payload corresponding to the payload offset of one, ‘y’, and tries to match it with the element of the node N1 504, the character class [zZ]. Since the byte does not match the character class, the graph walk engine pops the run stack entry. The graph walk engine then processes the same byte with popped stack entry which contains Node N0 502. The byte ‘y’ matches the character class [̂\n], so it delivers a match. The graph walk engine increments the payload offset by 1 and pushes a run stack entry containing Node N0 502) Regarding claim 7, Goyal teaches 7. (Original) A method comprising: as part of a match attempt between a regular expression (regex) pattern and a payload, a non-deterministic finite automaton (NFA) instance executing instructions for an NFA graph having a plurality of nodes linked via arcs indicative of transitions among states of the NFA instancev([0090] Typically, content aware application processing uses either a deterministic finite automata (DFA) or a non-deterministic finite automata (NFA) to recognize a pattern in the content of a received packet. The DFA and NFA are both finite state machines, that is, models of computation each including a set of states, a start-state, an input alphabet (set of all possible symbols) and a transition function. Computation begins in the start-state and changes to new states dependent on the transition function.); during execution of the instructions for the NFA graph, using a backtrack- depth counter counting a number of times a current state of the NFA graph has been previously visited during the match attempt between the regex pattern and the payload; upon the backtrack-depth counter for the NFA instance reaching or exceeding an adaptive backtracking depth limit for the NFA instance, terminating the match attempt between the regex pattern and the payload Goyal does not explicitly teach allowing the NFA instance to keep a record of number of times backtracking has occurred during the match attempt; andto ensure that malicious strinq matching does not result in a successful denial of service attack, upon the backtrack-depth counter for the NFA instance reaching or exceeding an adaptive backtracking depth limit for the NFA instance, terminating the match attempt between the regex pattern and the payload. Berglund teaches allowing the NFA instance to keep a record of number of times backtracking has occurred during the match attempt; andto ensure that malicious strinq matching does not result in a successful denial of service attack, upon the backtrack-depth counter for the NFA instance reaching or exceeding an adaptive backtracking depth limit for the NFA instance, terminating the match attempt between the regex pattern and the payload. (pg 118 – section 5.1 An Upper Bound on the Complexity of General Backtracking Analysis Let us first establish an upper bound on the complexity of general backtracking analysis. We will give an algorithm which solves this problem in EXPTIME. Afterwards, we will also note some minor hardness results. The EXPTIME decision procedure relies heavily on a result from [4]. Lemma 7. Given a string-to-tree transducer stt = (Q,Σ,Γ,q0,δ), it is decidable in deterministic expo nential time whether the function f(n) = max{|t| | t ∈ stt(s), s ∈ Σ∗, |s| ≤ n} grows exponentially, i.e. whether f ∈ 2Ω(n). In short, we will hereafter construct a string-to-tree transducer from a pNFA A which reads an input string (suitably decorated) and outputs the corresponding backtracking run of A (see Definition 3). In this way, wemodeltherunningofAlgorithm 4onthat string. Then Lemma7canbeappliedtothis transducer to decide exponential backtracking. To simplify the construction we first make a small adjustment to the input pNFA in the form of a “flattening”, which ensures that δ2 maps Q2 to Q∗ 1. That is, we remove the opportunity for repeated ε-transitions.) Accordingly, it would have been obvious to one of ordinary skill in the art before the effective filing date of the claimed invention to have modified the teachings of Goyal to include allowing the NFA instance to keep a record of number of times backtracking has occurred during the match attempt; andto ensure that malicious strinq matching does not result in a successful denial of service attack, upon the backtrack-depth counter for the NFA instance reaching or exceeding an adaptive backtracking depth limit for the NFA instance, terminating the match attempt between the regex pattern and the payload as taught by Berglund. It would be advantageous system stability by avoiding erroneoruos repetition loops as taught by Bergulund [0023]. Regarding claim 8, Goyal in view of Berglund teaches The method of claim 7, Goyal further teaches further comprising: (1) during backtracking storing intermediate matches between the regex pattern and the payload, and (2) during a second match attempt, subsequent to a termination of the match attempt, backtracking only to a previous successful partial match between the regex pattern and the payload. ([0126] The graph walk engine first processes Node N0 402. If the payload is “a,” the graph walk engine loads Node N1 404. The graph walk engine then processes the next segment of the payload. If the payload is ‘b’, the graph walk engine loads Node N3 408, which is a marked node. If the payload is ‘B,’ the graph walk engine loads Node N4 410, which is also a marked node. Both marked nodes instruct the graph walk engine to return a match.). Regarding claim 9, Goyal in view of Berglund teaches The method of claim 7, Goyal further teaches further comprising: (1) using a first instruction counter tracking a first number of the instructions executed by the NFA instance prior to a successful match between the regex pattern and the payload, (2) using a second instruction counter tracking a second number of instructions executed by the NFA instance prior to termination of the match attempt between the regex pattern and the payload. ([0130] When the graph walk engine is matching a payload segment to a character class, it can use the ASCII value of the payload as an index to the character class. For example, where the character class is [a-z], assume the graph walk engine is processing the letter “r,” which has an ASCII value of 114. The graph walk engine can access the 114th bit of the character class and determine whether it is set to determine whether it matches the character class. This can be expressed with the following logical statement: “if (CharacterClass[PayLoadASCIIValue] true), return match; else return nomatch,” where PayLoadASCIIValue is the ASCII value of the current segment of the payload, or in this case, 114.) Regarding claim 10, Goyal in view of Berglund teaches The method of claim 7, Goyal further teaches further comprising for each successful match attempt or a failed match attempt between a regex pattern and a payload storing a result. ([0131] A given pattern can also include multiple character classes. For example, the pattern “[a-z][0-9][̂\n][a-z]” has four character classes but only three unique character classes (i.e., [a-z], [0-9], and [̂\n]) because [a-z] is a repeated character class. So, compiler first determines the number of unique character classes present in the pattern(s). The compiler then assigns each character class a unique number (e.g., an index or identifier). For example, the compiler assigns [a-z] an index of 1, [0-9] an index of 2, and [̂\n] an index of 3. Even though it appears twice, the character class [a-z] is stored as a bitmap once, and can be accessed by its index of “1.”) Regarding claim 11, Goyal in view of Berglund teaches The method of claim 7, Goyal further teaches wherein dynamically adjusting the adaptive backtracking depth limit for the NFA instance comprises allowing for more backtracking for a payload with a smaller size relative to a payload with a larger size. ([0130] When the graph walk engine is matching a payload segment to a character class, it can use the ASCII value of the payload as an index to the character class. For example, where the character class is [a-z], assume the graph walk engine is processing the letter “r,” which has an ASCII value of 114. The graph walk engine can access the 114th bit of the character class and determine whether it is set to determine whether it matches the character class. This can be expressed with the following logical statement: “if (CharacterClass[PayLoadASCIIValue] true), return match; else return nomatch,” where PayLoadASCIIValue is the ASCII value of the current segment of the payload, or in this case, 114.) Regarding claim 12, Goyal in view of Berglund teaches The method of claim 7, Goyal further teaches further comprising maintaining in a memory associated with the NFA instance: (1) stack entries for instructions being executed for the NFA graph and (2) a hash value for each of the stack entries. ([0131] A given pattern can also include multiple character classes. For example, the pattern “[a-z][0-9][̂\n][a-z]” has four character classes but only three unique character classes (i.e., [a-z], [0-9], and [̂\n]) because [a-z] is a repeated character class. So, compiler first determines the number of unique character classes present in the pattern(s). The compiler then assigns each character class a unique number (e.g., an index or identifier). For example, the compiler assigns [a-z] an index of 1, [0-9] an index of 2, and [̂\n] an index of 3. Even though it appears twice, the character class [a-z] is stored as a bitmap once, and can be accessed by its index of “1.”) Regarding claim 13, Goyal in view of Berglund teaches The method of claim 12, Goyal further teaches wherein counting the number of times the current state of the NFA graph has been previously visited during the match attempt between the regex pattern and the payload comprises counting a number of matches between a hash value for a given stack entry and any hash values of stack entries previously pushed to a top of a stack for instructions being executed by the NFA instance. ([0131] A given pattern can also include multiple character classes. For example, the pattern “[a-z][0-9][̂\n][a-z]” has four character classes but only three unique character classes (i.e., [a-z], [0-9], and [̂\n]) because [a-z] is a repeated character class. So, compiler first determines the number of unique character classes present in the pattern(s). The compiler then assigns each character class a unique number (e.g., an index or identifier). For example, the compiler assigns [a-z] an index of 1, [0-9] an index of 2, and [̂\n] an index of 3. Even though it appears twice, the character class [a-z] is stored as a bitmap once, and can be accessed by its index of “1.”) Allowable Subject Matter Claim 14-19 and 21 allowed. The following is a statement of reasons for the indication of allowable subject matter: Goyal generally teaches compiling a pattern into a non-deterministic finite automata (NFA) graph includes examining the pattern for a plurality of elements and a plurality of node types. Each node type can correspond with an element. Each element of the pattern can be matched at least zero times. The method further includes generating a plurality of nodes of the NFA graph. Each of the plurality of nodes can be configured to match for one of the plurality of elements. The node can indicate the next node address in the NFA graph, a count value, and/or node type corresponding to the element. The node can also indicate the element representing a character, character class or string. The character can also be a value or a letter. Berglund generally teaches by linking failure backtracking with ambiguity in NFA, we show that catastrophic failure backtrack ing can be decided in polynomial time, and in the case of polynomial failure backtracking, the degree of the polynomial can be determined in polynomial time. General backtracking is shown decidable in EXPTIME by associating a tree transducer with the expression and applying a result The cited prior art when considered individually or in combination does not disclose the claimed invention. An updated prior art search was conducted and no prior anticipates or obviously teaches the claimed invention as recited in the dependent claims. Conclusion Any inquiry concerning this communication or earlier communications from the examiner should be directed to SAMUEL SHARPLESS whose telephone number is (571)272-1521. The examiner can normally be reached M-F 7:30 AM- 3:30 PM (ET). Examiner interviews are available via telephone, in-person, and video conferencing using a USPTO supplied web-based collaboration tool. To schedule an interview, applicant is encouraged to use the USPTO Automated Interview Request (AIR) at http://www.uspto.gov/interviewpractice. If attempts to reach the examiner by telephone are unsuccessful, the examiner’s supervisor, ALEKSANDR KERZHNER can be reached at 571-270-1760. The fax phone number for the organization where this application or proceeding is assigned is 571-273-8300. Information regarding the status of published or unpublished applications may be obtained from Patent Center. Unpublished application information in Patent Center is available to registered users. To file and manage patent submissions in Patent Center, visit: https://patentcenter.uspto.gov. Visit https://www.uspto.gov/patents/apply/patent-center for more information about Patent Center and https://www.uspto.gov/patents/docx for information about filing in DOCX format. For additional questions, contact the Electronic Business Center (EBC) at 866-217-9197 (toll-free). If you would like assistance from a USPTO Customer Service Representative, call 800-786-9199 (IN USA OR CANADA) or 571-272-1000. /S.C.S./Examiner, Art Unit 2165 /ALEKSANDR KERZHNER/Supervisory Patent Examiner, Art Unit 2165
Read full office action

Prosecution Timeline

Show 3 earlier events
Nov 05, 2025
Applicant Interview (Telephonic)
Nov 10, 2025
Response Filed
Nov 25, 2025
Examiner Interview Summary
Feb 17, 2026
Final Rejection mailed — §103
Apr 02, 2026
Notice of Allowance
Apr 02, 2026
Response after Non-Final Action
May 04, 2026
Response after Non-Final Action
Oct 05, 2026
Non-Final Rejection mailed — §103 (current)

Precedent Cases

Applications granted by this same examiner with similar technology

Patent 12754961
DATA MANAGEMENT APPARATUS, DATA MANAGEMENT METHOD, AND NON-TRANSITORY RECORDING MEDIUM
3y 10m to grant Granted Oct 06, 2026
Patent 12748761
GENERATING A DECISION TREE MODEL DURING QUERY EXECUTION VIA A RELATIONAL DATABASE SYSTEM
3y 1m to grant Granted Sep 29, 2026
Patent 12711202
COMPUTER-IMPLEMENTED METHOD AND DEVICE FOR EVALUATING A DATASET BASED ON A RANGE OF UNCERTAINTY
2y 4m to grant Granted Aug 18, 2026
Patent 12705289
SYSTEM AND METHOD FOR FINDING SIMILAR DOCUMENTS BASED ON SEMANTIC FACTUAL SIMILARITY
2y 9m to grant Granted Aug 11, 2026
Patent 12694032
EXECUTING A QUERY EXPRESSION VIA A DATABASE SYSTEM BY PROCESSING A PRIOR ROW INDEX IDENTIFIER
2y 11m to grant Granted Jul 28, 2026
Study what changed to get past this examiner. Based on 5 most recent grants.

Strategy Recommendation AI-generated — please review before filing

Get a prosecution strategy drawn from examiner precedents, rejection analysis, and claim mapping.
Typically takes 5-10 seconds — AI-generated, attorney review required before filing

Prosecution Projections

3-4
Expected OA Rounds
81%
Grant Probability
99%
With Interview (+29.3%)
2y 11m (~6m remaining)
Median Time to Grant
High
PTA Risk
Based on 146 resolved cases by this examiner. Grant probability derived from career allowance rate.

Sign in with your work email

Enter your email to receive a magic link. No password needed.

Personal email addresses (Gmail, Yahoo, etc.) are not accepted.

Free tier: 3 strategy analyses per month