Commit Graph

4625 Commits

Author SHA1 Message Date
PatR
b2fa6292db Lua error reporting buffer overflow
nhl_error() was clobbering the stack.  I assume that the 'source'
field in the Lua debugging structure is normally a file name, but
nethack loads an entire Lua script into one long string because it
usually comes out of the DLB container, and 'source' contained the
full string.  That would overflow the local buffer in nhl_error()
if nethack encountered a Lua problem and tried to report it. (In
my case, the problem was in a level description file modification.)

[Not something under user control unless user can modify dat/*.lua
and put the result into $HACKDIR/nhdat.]
2020-01-24 12:52:35 -08:00
PatR
3e18804371 half poison gas damage from wearing a wet towel
Make wearing a wet towel confer new attribute Half_gas_damage in
addition to the usual blindness.  It reduces damage from being inside
a gas cloud region and from being hit by poison gas breath attack.
It also fully blocks breathing of potion vapors.

Might make the Plane of Fire easier although overcoming its blindness
with telepathy won't reveal elementals.  Definitely has the potential
to make blind-from-birth conduct easier which wasn't the intent and
probably isn't significant.
2020-01-21 17:03:54 -08:00
PatR
a13d6c03c9 no more headless eyewear
Noticed while working on something else:  hero kept wearing a towel
after polymorphing into a form without any head.  And when not already
wearing one, could put on a blindfold/towel/lenses while in a headless
form.
2020-01-21 15:36:33 -08:00
nhmall
36bb4334e8 Merge fixes from 'NetHack-3.6' into NetHack-3.7-Jan2020 2020-01-20 21:33:20 -05:00
nhmall
92deddd6a3 use vsnprintf instead of vsprintf in pline.c 2020-01-20 16:09:00 -05:00
PatR
f3def5c0b9 command line triggered buffer overruns
Prevent extremely long command line arguments from overflowing local
buffers in raw_printf or config_error_add.  The increased buffer
sizes they recently got to deal with long configuration file values
aren't sufficient to handle command line induced overflows.

choose_windows(core): copy and truncate the window_type argument in
case it gets passed to config_error_add().

process_options(unix): report bad values with "%.60s" so that vsprintf
will implicitly truncate when formatted by raw_printf().
2020-01-20 16:08:59 -05:00
nhw_cron
b444698005 This is cron-daily v1-Jan-19-2020. manpages updated: nethack.txt 2020-01-20 08:52:59 -05:00
nhmall
5175c6ab07 doc bit; closes #287
closes #287
2020-01-19 23:09:53 -05:00
nhmall
76dd55a7b0 fixes37.0 update 2020-01-18 11:43:12 -05:00
nhmall
b537d36275 updated files from cron-NetHack-3.7 2020-01-18 11:37:45 -05:00
nhmall
585511e89e Merge 'NetHack-3.6' changes into NetHack-3.7-Jan2020 2020-01-18 11:35:26 -05:00
PatR
d19cab4d98 implicit_uncursed, mention_walls
Move 'implicit_uncursed' and 'mention_walls' from iflags to flags to
make their current setting persist across save/restore.  Invalidates
existing save files.
2020-01-17 04:03:14 -08:00
PatR
1a89e44e19 fix #K188 - trying to move past edge of level
Trying to move into a wall or solid rock fails and doesn't do anything
(unless the 'mention_walls' option is On) and doesn't use a turn, and
trying to move off the edge of the map window also doesn't do anything
(except for 'mention_walls') but that did use a turn.  Don't.
2020-01-17 02:43:32 -08:00
nhmall
a8208b44c8 fixes update 2020-01-16 10:18:37 -05:00
Pasi Kallinen
f4ab235b81 Prevent accessing outside the mons array
Fix another out-of-bounds error
Monster trying to decide if a tin could cure stoning looking at
a special or empty tin would do acidic(&mons[-1])
2020-01-16 10:14:16 -05:00
nhmall
fe4bdae740 closes #282
closes #282
2020-01-14 23:50:06 -05:00
nhw_cron
c8fbb3b7b1 This is cron-daily v1-Jan-14-2020. guidebook updated: doc/Guidebook.txt 2020-01-14 22:20:38 -05:00
nhmall
d5174323eb Merge 'NetHack-3.6' updates into NetHack-3.7-Jan2020 2020-01-14 22:09:29 -05:00
nhmall
4b052f753e Merge branch 'NetHack-3.6-housekeeping-for-3.6.5' into NetHack-3.6 2020-01-14 21:58:55 -05:00
nhw_cron
2e570e03e9 This is cron-daily v1-Jan-14-2020. manpages updated: recover.txt 2020-01-14 12:02:57 -05:00
nhw_cron
0415a5a235 This is cron-daily v1-Jan-14-2020. manpages updated: nethack.txt 2020-01-14 12:02:39 -05:00
nhw_cron
6a768b0cbe This is cron-daily v1-Jan-14-2020. manpages updated: mnh.txt 2020-01-14 12:02:26 -05:00
nhw_cron
32c7279e63 This is cron-daily v1-Jan-14-2020. manpages updated: mn.txt 2020-01-14 12:02:10 -05:00
nhw_cron
f431c72873 This is cron-daily v1-Jan-14-2020. manpages updated: makedefs.txt 2020-01-14 12:01:52 -05:00
nhw_cron
bd254e0853 This is cron-daily v1-Jan-14-2020. manpages updated: dlb.txt 2020-01-14 12:01:30 -05:00
nhw_cron
b21b99d433 This is cron-daily v1-Jan-14-2020. manpages updated: mnh.txt 2020-01-14 11:55:59 -05:00
nhw_cron
466a126e39 This is cron-daily v1-Jan-14-2020. manpages updated: mn.txt 2020-01-14 11:55:45 -05:00
nhw_cron
35634fab8e This is cron-daily v1-Jan-14-2020. manpages updated: recover.txt 2020-01-14 11:52:38 -05:00
nhw_cron
7ac4e0fd06 This is cron-daily v1-Jan-14-2020. manpages updated: nethack.txt 2020-01-14 11:52:19 -05:00
nhw_cron
cc3570a7d9 This is cron-daily v1-Jan-14-2020. manpages updated: makedefs.txt 2020-01-14 11:52:00 -05:00
nhw_cron
36736f2cf7 This is cron-daily v1-Jan-14-2020. manpages updated: lev_comp.txt 2020-01-14 11:51:36 -05:00
nhw_cron
e44e05df59 This is cron-daily v1-Jan-14-2020. manpages updated: dlb.txt 2020-01-14 11:51:14 -05:00
nhw_cron
ed72eb71da This is cron-daily v1-Jan-14-2020. manpages updated: dgn_comp.txt 2020-01-14 11:50:59 -05:00
nhmall
41137101a4 documentation updates 2020-01-14 11:44:02 -05:00
nhmall
a6c46bbd85 housekeeping items for 3.6.5 - first pass 2020-01-14 11:35:06 -05:00
nhmall
07f9e329b6 Merge changes from NetHack-3.6 into NetHack-3.7-Jan2020 2020-01-14 09:28:38 -05:00
PatR
cdc598e8bd fix pline.c potential buffer overruns
Fix 'Bugs 4, 5, and 6' which all use a similar fix but would have
conflicts over '#define BIGBUFSZ' if committed separately.

Format ("short explanation %s", string_argument), where the
explanation always has modest length but the string is potentially
up to 4*BUFSZ in length, into a 5*BUFSZ buffer.  Then truncate the
result to at most BUFSZ-1 characters so that it can be safely passed
to interface-specific putstr() or raw_print().

Applies to pline(), raw_printf(), and config_error_add().  Also done
for impossible() although there's no evidence that its buffer could
be overflowed in a controlled manner.
2020-01-14 02:52:34 -08:00
PatR
74de7d31e0 fix sym_val() buffer overrun
Fix 'Bug 3' where too long SYMBOL=string in run-time config file could
overflow a local buffer and clobber the stack.

Valid value is only one character long after processing an 'escaped'
encoded character which can be at most 6 characters (plus terminator):
backslash M backslash and up three digits.  If/when UTF8 gets added
the number of digits will increase.  Use a truncated copy of the input
(substantially bigger than 6+1); ignore any excess.
2020-01-14 02:05:14 -08:00
PatR
a842fda44c fix add_menu_coloring() buffer overrun
Fix 'Bug 2' where too long MENUCOLOR=string in run-time config file
could overflow a local buffer and clobber the stack.

Theoretically a menu coloring regular expression could require a
bigger buffer but I don't think we need to try to support that.
255 characters minus the amount needed to specify color and/or
attributes should be ample.
2020-01-13 19:26:53 -08:00
PatR
c35139e9ce fixes36.5 2020-01-13 19:17:35 -08:00
nhw_cron
e043478ac7 This is cron-daily v1-Jan-13-2020. guidebook updated: doc/Guidebook.txt 2020-01-13 16:44:18 -05:00
nhmall
cad10295b1 Merge some bug1 fixes from NetHack-3.6 2020-01-13 15:55:01 -05:00
PatR
2b1f8a1b43 fix #K166 - role selection filtering
pick_role() had a 5 year old copy+paste error where a pair of lines
were cloned multiple times but one of the resulting lines didn't get
the intended revision, preventing OPTIONS=align:!chaotic or !neutral
or !lawful from working as intended when letting the game choose role
randomly.  The bad line should have been calling ok_align() but that
routine turned out to have a bug too.

Fixing those lead to other less obvious problems with role selection,
particularly the tty menu version for picking manually.  Roles and/or
races which should have been excluded by partial specification weren't
always kept out.  Also, if any filtering was specified, trying to
disable all filters (via choosing 'reset filtering' and de-selecting
everything in the menu) was a no-op.  Once any filtering was in place
you had to leave at least one role or race or gender or alignment
flagged as not acceptable in order to change any of the filtering.
When that was fixed and it was possible to turn off all filtering,
there was no way to turn it back on because the menu choice to reset
the filters wasn't offered unless there was some filtering in place
(that was intentional but turned out not to be a good idea).

I checked curses and X11; they both offer less versatile selection
capability that don't seem to need the tty-specific fixes.
2020-01-13 12:34:01 -08:00
nhmall
25c9fb8d2f fixes update 2020-01-13 15:30:23 -05:00
PatR
2d35668c63 update novel fixes entry 2020-01-12 22:15:37 -08:00
PatR
caaf1b375a randonly occurring Discworld novels
Give 'novel' a 1 in 1000 chance of being created in place of each
random spellbook (except for hero's initial inventory and NPC
priests' monster inventory and divine reward for prayer--those all
force regular spellbooks; statue contents aren't among the
exceptions--those books can now be novels).  Shop inventory (where
first book or scroll shop created is guaranteed one novel) hasn't
been touched.  If there is any other special spellbook handling
somewhere, I've overlooked it.
2020-01-12 11:00:38 -08:00
PatR
07a2c1c813 fix github issue #279 - boulder feedback
Polymophed into a giant and moving onto a boulder's location could
yield "you easily pick it up" (without actually doing so) followed
by "you see a boulder here".  It would happen if autopickup was Off,
or if the 'm' move-without-autopickup prefix was used, while either
boulder was included in pickup_types (including when that is set
for 'all') or hero had thrown that particular boulder and
pickup_thrown was On.  The check for whether auto-pick should try
on an object relied on its caller verifying that autopickup was On.
pickup() does that for
 pickup() -> autopick() -> autopick_testobj()
but moverock() wasn't doing that for
 moverock() -> autopick_testobj()
so the logic controlling moverock's message was subverted.

I first thought that logic itself was incorrect and changed the
message.  This keeps the new message even though it turned out not
to be cause of the problem.

Fixes #279
2020-01-12 05:05:24 -08:00
PatR
7c3ae74c27 hallucinatory water and lava terrain
When browsing the map while hallucinating and looking at a pool, a
moat, or 'other' water or at molten lava, report with hallucinatory
liquids rather than the ordinary substance.  Likewise when browsing
self on map or using ^X would report "sinking into lava".
2020-01-11 09:34:01 -08:00
PatR
92994f6d71 data.base lookup fix
Changing data.base lookup to accept leading spaces as an alternative
to the normal leading tab ended up adding an invalid integrity check.
Lines without any leading space or tab were considered to be in error
but empty lines are present so need to be accepted.
2020-01-11 08:45:45 -08:00
PatR
e27b6af856 fix github issue #277 - repeat door open failure
The change to make "ouch! you bump into a door" use up a turn didn't
end running, so when it happened while running useless turns took
place and that message was delivered repeatedly until some other
action interrupted the hero.  It didn't matter whether autoopen is
enabled.

Fixes #277
2020-01-10 13:13:36 -08:00