[Python-Dev] Directions for reproducing the coredump (original) (raw)

Eric S. Raymond esr@thyrsus.com
Fri, 11 Aug 2000 23:56:33 -0400


Here are the directions to reproduce the core dump.

  1. Download and unpack CML2 version 0.7.6 from <http://www.tuxedo.org/~esr/kbuild/>. Change directory into it.

  2. Do `cmlcompile.py kernel-rules.cml' to generate a pickled rulebase.

  3. Run `make xconfig'. Ignore the error message about the arch defconfig.

  4. Set NETDEVICES on the main menu to 'y'.

  5. Select the "Network Device Configuration" menu that appears below.

  6. Set PPP to 'y'.

  7. Select the "PPP options" menu that appears below it.

  8. Set PPP_BSDCOMP to 'y'.

  9. Observe and dismiss the pop-up window. Quit the configurator using the "File" menu on the menu bar.

  10. Now apply the attached patch.

  11. Repeat steps 2-10.

  12. Observe the core dump. If you look near cmlsystem.py:770, you'll see that the patch inserted two print statements that bracket the apparent point of the core dump.

  13. To verify that this core dump is neither a Tkinter nor an ncurses problem, run `make menuconfig'.

  14. Repeat steps 2-8. To set symbols in the curses interface, use the arrow keys to select each one and type "y". To select a menu, use the arrow keys and type a space or Enter when the selection bar is over the entry.

  15. Observe the core dump at the same spot.

This bug bites both a stock 1.5.2 and today's CVS snapshoot of 2.0.

--- cml.py 2000/08/12 03:21:40 1.97 +++ cml.py 2000/08/12 03:25:45 @@ -111,6 +111,21 @@ res = res + self.dump() return res[:-1] + "}"

+class Requirement:

--- cmlcompile.py 2000/08/10 16:22:39 1.131 +++ cmlcompile.py 2000/08/12 03:24:31 @@ -12,7 +12,7 @@

_keywords = ('symbols', 'menus', 'start', 'unless', 'suppress', 'dependent', 'menu', 'choices', 'derive', 'default', - 'range', 'require', 'prohibit', 'private', 'debug', + 'range', 'require', 'prohibit', 'explanation', 'private', 'debug', 'helpfile', 'prefix', 'banner', 'icon', 'condition', 'trits', 'on', 'warndepend')

@@ -432,7 +432,14 @@ expr = parse_expr(input) if leader.type == "prohibit": expr = ('==', expr, cml.n.value) - requirements.append(expr)

@@ -746,7 +753,7 @@ entry.visibility = resolve(entry.visibility) if entry.default: entry.default = resolve(entry.default)

--- cmlsystem.py 2000/07/25 04:24:53 1.98 +++ cmlsystem.py 2000/08/12 03:29:21 @@ -28,6 +28,7 @@ "INCAUTOGEN":"/*\n * Automatically generated, don't edit\n */\n", "INCDERIVED":"/*\n * Derived symbols\n */\n", "ISNOTSET":"# %s is not set\n",

@@ -436,8 +437,8 @@ if symbol.constraints: self.set_symbol(symbol, value) for constraint in symbol.constraints:

@@ -544,7 +545,7 @@ # be unfrozen. Simplify constraints to remove newly frozen variables. # Then rerun optimize_constraint_access. if freeze:

@@ -559,7 +560,7 @@ violations = [] # First, check the explicit constraints. for constraint in self.constraints:

@@ -570,7 +571,7 @@ mvalued = ('and', ('!=', entry,cml.m), mvalued) if mvalued != cml.y: mvalued = self.simplify(mvalued)

@@ -631,10 +632,10 @@ dups = {} relevant = [] for csym in touched:

@@ -765,7 +766,9 @@ else: self.set_symbol(left, cml.n.value, source) return 1

End of diffs,

-- <a href="http://www.tuxedo.org/~esr">Eric S. Raymond

A human being should be able to change a diaper, plan an invasion, butcher a hog, conn a ship, design a building, write a sonnet, balance accounts, build a wall, set a bone, comfort the dying, take orders, give orders, cooperate, act alone, solve equations, analyze a new problem, pitch manure, program a computer, cook a tasty meal, fight efficiently, die gallantly. Specialization is for insects. -- Robert A. Heinlein, "Time Enough for Love"