augure 0.3.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ff5020e141d36fa45052119447dec8505ffe4625d24b7baf9076c96f18ce2c3a
4
- data.tar.gz: 2abf0f3747192515a9388b38321d9384d25bbf3b8d9d20d0fc2258617941347b
3
+ metadata.gz: a789ddf9e30394c583979b786270f9c5523a6aa559eeb26d744e4076c4f7448e
4
+ data.tar.gz: c725354af8ac4b3b30c648e98611425eaa9365dd981fd09bf6078219bec0210c
5
5
  SHA512:
6
- metadata.gz: 1bccb18fe44204206624df0810a76c8d2ef9c57625c38759d16921d96cfbff35ce353c5002ffcb369881f79eab881ab03b086293ea885a9626fc220f3b3e633b
7
- data.tar.gz: 3054313b19a418e28a90d95f67d5786f9cc5ee2c8245c6f46fd89e02e7e212adb6a187b308781a0540a15ade24cba7647552c949184982fddd4cca9b02a36339
6
+ metadata.gz: edc2f71a9f272fa9385c9bd0e16acb798c2860c9eb0bbfabf0475112d854a73c9ed97309d48a2d828dc06dfe8dd637d1665a062109d980fca7746953e6247c93
7
+ data.tar.gz: bfa1a02a06249670a7dca49a61cc07f61ac26c4660d2d87fb6867c3370aa117c47c843e83a4841ecb1b7c9dbe421a6ccda5f57751e93ff77dbba0ee3f52e560b
data/CHANGELOG.md CHANGED
@@ -5,7 +5,14 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
- ## [Unreleased]
8
+ ## [0.3.1] - 2026-11-02
9
+
10
+ ### Fixed
11
+
12
+ - The fact-atom grammar rejects empty string atoms (`allocator("")`): the empty
13
+ atom parsed, carried no observation, and every rule of the predicate silently
14
+ never fired (measured: the suggest step's empty allocator tilted a decision).
15
+ Loud `MalformedFact` with the line number at parse and at `add`.
9
16
 
10
17
  ## [0.3.0] - 2026-10-30
11
18
 
data/README.md CHANGED
@@ -11,10 +11,13 @@
11
11
  ---
12
12
 
13
13
  [![CI](https://github.com/log0u7/augure/actions/workflows/ci.yml/badge.svg)](https://github.com/log0u7/augure/actions/workflows/ci.yml)
14
+ [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
15
+ [![Ruby](https://img.shields.io/badge/Ruby-%3E%3D%203.4-CC342D?logo=ruby&logoColor=white)](https://www.ruby-lang.org/)
14
16
  [![Gem Version](https://img.shields.io/gem/v/augure)](https://rubygems.org/gems/augure)
15
- [![Ruby](https://img.shields.io/badge/ruby-%3E%3D%203.4-ruby.svg)](https://www.ruby-lang.org/)
16
- [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
17
17
  [![Datalog](https://img.shields.io/badge/Datalog-333333.svg)](packs/)
18
+ [![Metasm](https://img.shields.io/badge/Metasm-333333.svg)](https://metasm.cr0.org/)
19
+ [![Z3](https://img.shields.io/badge/Z3-333333.svg)](https://github.com/Z3Prover/z3)
20
+ [![MCP](https://img.shields.io/badge/MCP-333333.svg)](https://modelcontextprotocol.io)
18
21
 
19
22
  Every exploitation framework answers *"how do I run this technique?"*.
20
23
  **Augure answers the question nobody automates: *"which technique should run,
@@ -53,8 +56,8 @@ augure analyze examples/ret2win.facts # your first decision
53
56
  ```
54
57
 
55
58
  (The `examples/` ship in the gem; in a repo checkout the same paths work
56
- from the repo root. Not published yet? The sibling lictor checkout
57
- resolves augure by path - its Gemfile says so.)
59
+ from the repo root. augure-profiler installs the same way and turns a
60
+ real binary into the facts file.)
58
61
 
59
62
  Profile a real binary into facts, then decide on them:
60
63
 
data/lib/augure/facts.rb CHANGED
@@ -125,6 +125,15 @@ module Augure
125
125
 
126
126
  raise MalformedFact, "#{name}: fact atoms may not contain quotes, backslashes, parens or newlines"
127
127
  end
128
+ # the empty atom: a fact like allocator("") carries no observation -
129
+ # it parses, then every rule of the predicate silently never fires
130
+ # (measured: the suggest step's empty allocator tilted a decision).
131
+ # Loud failure instead of silent void.
132
+ args.each do |arg|
133
+ next unless arg.is_a?(String) && arg.empty?
134
+
135
+ raise MalformedFact, "#{name}: fact atoms may not be empty strings"
136
+ end
128
137
  (@rels[name] ||= []) << args
129
138
  self
130
139
  end
@@ -163,7 +172,13 @@ module Augure
163
172
  if arg.match?(/\A-?\d+\z/)
164
173
  arg.to_i
165
174
  elsif arg.match?(/\A"[^"\\()]*"\z/)
166
- arg[1..-2]
175
+ inner = arg[1..-2]
176
+ if inner.empty?
177
+ raise MalformedFact,
178
+ "line #{lineno}: #{name} arg #{i + 1} may not be an empty string"
179
+ end
180
+
181
+ inner
167
182
  else
168
183
  raise MalformedFact,
169
184
  "line #{lineno}: #{name} arg #{i + 1} is not a quoted string atom or integer"
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Augure
4
- VERSION = "0.3.0"
4
+ VERSION = '0.3.1'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: augure
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gregory Epp