From fc7f52f83f1ad266e09f2e6883573876bad5f6ca Mon Sep 17 00:00:00 2001 From: "Eric S. Raymond" Date: Thu, 15 Jun 2017 16:54:29 -0400 Subject: [PATCH 1/7] Don't do dwarf moves after a fallback command. Avoids a crash bug. --- main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main.c b/main.c index 3d4962a..5b35f6f 100644 --- a/main.c +++ b/main.c @@ -1058,7 +1058,7 @@ static bool do_command(FILE *cmdin) if (i == -1) { /* Gee, I don't understand. */ if (fallback_handler(rawbuf)) - return true; + continue; SETPRM(1,WD1,WD1X); RSPEAK(DONT_KNOW); goto L2600; From d2b226b34c67de83fddb28519922c28518910e0f Mon Sep 17 00:00:00 2001 From: "Eric S. Raymond" Date: Thu, 15 Jun 2017 16:58:48 -0400 Subject: [PATCH 2/7] Add regression test for seed crash bug. --- tests/seedcrash.chk | 1304 +++++++++++++++++++++++++++++++++++++++++++ tests/seedcrash.log | 225 ++++++++ 2 files changed, 1529 insertions(+) create mode 100644 tests/seedcrash.chk create mode 100644 tests/seedcrash.log diff --git a/tests/seedcrash.chk b/tests/seedcrash.chk new file mode 100644 index 0000000..ca74e94 --- /dev/null +++ b/tests/seedcrash.chk @@ -0,0 +1,1304 @@ + +Welcome to Adventure!! Would you like instructions? + +> n + +You are standing at the end of a road before a small brick building. +Around you is a forest. A small stream flows out of the building and +down a gully. + +> seed 1635997320 +Seed set to 1635997320 + +You're in front of building. + +> in + +You are inside a building, a well house for a large spring. + +There are some keys on the ground here. + +There is a shiny brass lamp nearby. + +There is food here. + +There is a bottle of water here. + +> take lamp + +OK + +> xyzzy + +>>Foof!<< + +It is now pitch dark. If you proceed you will likely fall into a pit. + +> take rod + +OK + +> e + +You are crawling over cobbles in a low passage. There is a dim light +at the east end of the passage. + +There is a small wicker cage discarded nearby. + +> take cage + +OK + +> w + +It is now pitch dark. If you proceed you will likely fall into a pit. + +> on + +Your lamp is now on. + +You are in a debris room filled with stuff washed in from the surface. +A low wide passage with cobbles becomes plugged with mud and debris +here, but an awkward canyon leads upward and west. In the mud someone +has scrawled, "MAGIC WORD XYZZY". + +> w + +You are in an awkward sloping east/west canyon. + +> w + +You are in a splendid chamber thirty feet high. The walls are frozen +rivers of orange stone. An awkward canyon and a good passage exit +from east and west sides of the chamber. + +A cheerful little bird is sitting here singing. + +> drop rod + +OK + +> take bird + +OK + +> take rod + +OK + +> w + +At your feet is a small pit breathing traces of white mist. An east +passage ends here except for a small crack leading on. + +Rough stone steps lead down the pit. + +> free bird + +OK + +> wave rod + +The bird flies about agitatedly for a moment, then disappears through +the crack. It reappears shortly, carrying in its beak a jade +necklace, which it drops at your feet. + +> drop rod + +OK + +> take bird + +OK + +> take jade + +OK + +> e + +You're in bird chamber. + +> e + +You are in an awkward sloping east/west canyon. + +> e + +You're in debris room. + +> off + +Your lamp is now off. + +It is now pitch dark. If you proceed you will likely fall into a pit. + +> xyzzy + +>>Foof!<< + +You're inside building. + +There are some keys on the ground here. + +There is food here. + +There is a bottle of water here. + +> drop jade + +OK + +> xyzzy + +>>Foof!<< + +It is now pitch dark. If you proceed you will likely fall into a pit. + +> on + +Your lamp is now on. + +You're in debris room. + +> w + +You are in an awkward sloping east/west canyon. + +> w + +You're in bird chamber. + +> w + +You're at top of small pit. + +A three foot black rod with a rusty star on an end lies nearby. + +Rough stone steps lead down the pit. + +> take rod + +OK + +> d + +You are at one end of a vast hall stretching forward out of sight to +the west. There are openings to either side. Nearby, a wide stone +staircase leads downward. The hall is filled with wisps of white mist +swaying to and fro almost as if alive. A cold wind blows up the +staircase. There is a passage at the top of a dome behind you. + +Rough stone steps lead up the dome. + +> w + +You are on the east bank of a fissure slicing clear across the hall. +The mist is quite thick here, and the fissure is too wide to jump. + +> wave rod + +The bird flies agitatedly about the cage. + +A crystal bridge now spans the fissure. + +> drop rod + +OK + +> e + +You're in Hall of Mists. + +Rough stone steps lead up the dome. + +> n + +You are in the Hall of the Mountain King, with passages off in all +directions. + +A huge green fierce snake bars the way! + +> free bird + +The little bird attacks the green snake, and in an astounding flurry +drives the snake away. + +> take bird + +OK + +> s + +You are in the south side chamber. + +There is precious jewelry here! + +> take jewelry + +OK + +> n + +You're in Hall of Mt King. + +> sw + +You are in a secret canyon which here runs e/w. It crosses over a +very tight canyon 15 feet below. If you go down you may not be able +to get back up. + +> w + +You are in a secret canyon which exits to the north and east. + +A huge green fierce dragon bars the way! + +The dragon is sprawled out on a persian rug!! + +> feed dragon + +There's nothing here it wants to eat (except perhaps you). + +> kill dragon + +With what? Your bare hands? + +> yes + +Congratulations! You have just vanquished a dragon with your bare +hands! (Unbelievable, isn't it?) + +You are in a secret canyon which exits to the north and east. + +There is a persian rug spread out on the floor! + +The blood-specked body of a huge green dead dragon lies to one side. + +> drink blood + +Your head buzzes strangely for a moment. + +> take rug + +OK + +> e + +You're in secret e/w canyon above tight canyon. + +> e + +You're in Hall of Mt King. + +> n + +You are in a low n/s passage at a hole in the floor. The hole goes +down to an e/w passage. + +There are bars of silver here! + +> take silver + +OK + +> n + +You are in a large room, with a passage to the south, a passage to the +west, and a wall of broken rock to the east. There is a large "Y2" on +a rock in the room's center. + +> off + +Your lamp is now off. + +It is now pitch dark. If you proceed you will likely fall into a pit. + +> plugh + +>>Foof!<< + +You're inside building. + +A precious jade necklace has been dropped here! + +There are some keys on the ground here. + +There is food here. + +There is a bottle of water here. + +> drop jewelry + +OK + +> drop rug + +OK + +> drop silver + +OK + +> out + +You're in front of building. + +> s + +You are in a valley in the forest beside a stream tumbling along a +rocky bed. + +> w + +You are wandering aimlessly through the forest. + +> n + +You are wandering aimlessly through the forest. + +Your keen eye spots a severed leporine appendage lying on the ground. + +> take appendage + +OK + +> free bird + +OK + +> drop cage + +OK + +> listen + +The bird is singing to you in gratitude for your having returned it to +its home. In return, it informs you of a magic word which it thinks +you may find useful somewhere near the Hall of Mists. The magic word +changes frequently, but for now the bird believes it is "F'UNJ". You +thank the bird for this information, and it flies off into the forest. + +> s + +You are wandering aimlessly through the forest. + +> s + +You're in valley. + +> n + +You're in front of building. + +> in + +You're inside building. + +There are bars of silver here! + +There is a persian rug spread out on the floor! + +There is precious jewelry here! + +A precious jade necklace has been dropped here! + +There are some keys on the ground here. + +There is food here. + +There is a bottle of water here. + +> take water + +OK + +> plugh + +>>Foof!<< + +It is now pitch dark. If you proceed you will likely fall into a pit. + +> on + +Your lamp is now on. + +You're at "Y2". + +> plover + +>>Foof!<< + +You're in a small chamber lit by an eerie green light. An extremely +narrow tunnel exits to the west. A dark corridor leads ne. + +There is an emerald here the size of a plover's egg! + +> ne + +You're in the dark-room. A corridor leading south is the only exit. + +A massive stone tablet imbedded in the wall reads: +"Congratulations on bringing light into the dark-room!" + +There is a platinum pyramid here, 8 inches on a side! + +> take pyramid + +OK + +> s + +You're in Plover Room. + +There is an emerald here the size of a plover's egg! + +> plover + +>>Foof!<< + +You're at "Y2". + +A hollow voice says "PLUGH". + +> s + +You're in n/s passage above e/w passage. + +> d + +A little dwarf just walked around a corner, saw you, threw a little +axe at you which missed, cursed, and ran away. + +You are in a dirty broken passage. To the east is a crawl. To the +west is a large passage. Above you is a hole to another passage. + +There is a little axe here. + +> take axe + +OK + +> u + +There is a threatening little dwarf in the room with you! + +You're in n/s passage above e/w passage. + +> s + +There is a threatening little dwarf in the room with you! + +You're in Hall of Mt King. + +> up + +There is a threatening little dwarf in the room with you! + +You're in Hall of Mists. + +Rough stone steps lead up the dome. + +> w + +There is a threatening little dwarf in the room with you! + +You're on east bank of fissure. + +A three foot black rod with a rusty star on an end lies nearby. + +A crystal bridge now spans the fissure. + +> w + +There is a threatening little dwarf in the room with you! + +You are on the west side of the fissure in the Hall of Mists. + +There are diamonds here! + +A crystal bridge now spans the fissure. + +> w + +There is a threatening little dwarf in the room with you! + +You are at the west end of the Hall of Mists. A low wide crawl +continues west and another goes north. To the south is a little +passage 6 feet off the floor. + +> w + +There are 2 threatening little dwarves in the room with you. + +One sharp nasty knife is thrown at you! + +It misses! + +You are at the east end of a very long hall apparently without side +chambers. To the east a low wide crawl slants up. To the north a +round two foot hole slants down. + +> throw axe + +You killed a little dwarf. The body vanishes in a cloud of greasy +black smoke. + +There is a threatening little dwarf in the room with you! + +One sharp nasty knife is thrown at you! + +It misses! + +You're at east end of long hall. + +There is a little axe here. + +> take axe + +OK + +> w + +There is a threatening little dwarf in the room with you! + +You are at the west end of a very long featureless hall. The hall +joins up with a narrow north/south passage. + +> s + +There is a threatening little dwarf in the room with you! + +You are in a maze of twisty little passages, all different. + +> sw + +There is a threatening little dwarf in the room with you! + +You are in a little maze of twisty passages, all different. + +> se + +There is a threatening little dwarf in the room with you! + +You are in a little maze of twisting passages, all different. + +> s + +There is a threatening little dwarf in the room with you! + +Dead end + +There is a massive and somewhat battered vending machine here. The +instructions on it read: "Drop coins here to receive fresh batteries." + +> kill machine + +As you strike the vending machine, it pivots backward along with a +section of wall, revealing a dark passage leading south. + +> s + +There is a threatening little dwarf in the room with you! + +You are in a long, rough-hewn, north/south corridor. + +> s + +There is a threatening little dwarf in the room with you! + +You are in a large chamber with passages to the west and north. + +A formidable ogre bars the northern exit. + +> kill ogre + +The ogre, who despite his bulk is quite agile, easily dodges your +attack. He seems almost amused by your puny effort. + +One sharp nasty knife is thrown at you! + +The ogre, distracted by your rush, is struck by the knife. With a +blood-curdling yell he turns and bounds after the dwarf, who flees +in panic. You are left alone in the room. + +> n + +You are in the ogre's storeroom. The only exit is to the south. + +There is an enormous ruby here! + +> take ruby + +OK + +> s + +You are in a large chamber with passages to the west and north. + +> w + +You are in a long, rough-hewn, north/south corridor. + +> n + +Dead end + +There is a massive vending machine here, swung back to reveal a +southward passage. + +> n + +You are in a little maze of twisting passages, all different. + +> n + +You are in a little maze of twisty passages, all different. + +> nw + +You are in a maze of twisty little passages, all different. + +> d + +You're at west end of long hall. + +> e + +You're at east end of long hall. + +> e + +You're at west end of Hall of Mists. + +> e + +You're on west bank of fissure. + +There are diamonds here! + +A crystal bridge now spans the fissure. + +> take diamonds + +OK + +> e + +You're on east bank of fissure. + +A three foot black rod with a rusty star on an end lies nearby. + +A crystal bridge now spans the fissure. + +> e + +You're in Hall of Mists. + +Rough stone steps lead up the dome. + +> drop bottle + +OK + +> s + +This is a low room with a crude note on the wall. The note says, +"You won't get it up the steps". + +There is a large sparkling nugget of gold here! + +> take gold + +OK + +> n + +You're in Hall of Mists. + +There is a bottle of water here. + +> n + +You're in Hall of Mt King. + +> n + +You're in n/s passage above e/w passage. + +> n + +You're at "Y2". + +> off + +Your lamp is now off. + +It is now pitch dark. If you proceed you will likely fall into a pit. + +> plugh + +>>Foof!<< + +You're inside building. + +There are bars of silver here! + +There is a persian rug spread out on the floor! + +There is precious jewelry here! + +A precious jade necklace has been dropped here! + +There are some keys on the ground here. + +There is food here. + +> drop gold + +OK + +> drop diamonds + +OK + +> drop pyramid + +OK + +> drop ruby + +OK + +> plugh + +>>Foof!<< + +It is now pitch dark. If you proceed you will likely fall into a pit. + +A hollow voice says "PLUGH". + +> on + +Your lamp is now on. + +You're at "Y2". + +> s + +You're in n/s passage above e/w passage. + +> s + +You are in the Hall of the Mountain King, with passages off in all +directions. + +> u + +There is a threatening little dwarf in the room with you! + +You are at one end of a vast hall stretching forward out of sight to +the west. There are openings to either side. Nearby, a wide stone +staircase leads downward. The hall is filled with wisps of white mist +swaying to and fro almost as if alive. A cold wind blows up the +staircase. There is a passage at the top of a dome behind you. + +There is a bottle of water here. + +Rough stone steps lead up the dome. + +> take water + +OK + +> throw axe + +You killed a little dwarf. + +You're in Hall of Mists. + +There is a little axe here. + +Rough stone steps lead up the dome. + +> take axe + +OK + +> n + +You're in Hall of Mt King. + +> n + +You are in a low n/s passage at a hole in the floor. The hole goes +down to an e/w passage. + +> d + +You're in dirty passage. + +> bedquilt + +You are in Bedquilt, a long east/west passage with holes everywhere. +To explore at random select north, south, up, or down. + +> slab + +You are in a large low circular chamber whose floor is an immense slab +fallen from the ceiling (Slab Room). East and west there once were +large passages, but they are now filled with boulders. Low small +passages go north and south, and the south one quickly bends west +around the boulders. + +> s + +You are at the west end of the Twopit Room. There is a large hole in +the wall above the pit at this end of the room. + +> d + +You are at the bottom of the western pit in the Twopit Room. There is +a large hole in the wall about 25 feet above you. + +There is a tiny little plant in the pit, murmuring "water, water, ..." + +> water plant + +The plant spurts into furious growth for a few seconds. + +You're in west pit. + +There is a 12-foot-tall beanstalk stretching up out of the pit, +bellowing "WATER!! WATER!!" + +> u + +You're at west end of Twopit Room. + +The top of a 12-foot-tall beanstalk is poking out of the west pit. + +> w + +You're in Slab Room. + +> u + +You are in a secret n/s canyon above a large room. + +> reservoir + +You are at the edge of a large underground reservoir. An opaque cloud +of white mist fills the room and rises rapidly upward. The lake is +fed by a stream, which tumbles out of a hole in the wall about 10 feet +overhead and splashes noisily into the water somewhere within the +mist. There is a passage going back toward the south. + +> F'UNJ + +The waters have parted to form a narrow path across the reservoir. + +> n + +You are walking across the bottom of the reservoir. Walls of water +rear up on either side. The roar of the water cascading past is +nearly deafening, and the mist is so thick you can barely see. + +> n + +You are at the northern edge of the reservoir. A northwest passage +leads sharply up from here. + +The waters have parted to form a narrow path across the reservoir. + +> nw + +You are scrambling along a treacherously steep, rocky passage. + +> u + +You are on a very steep incline, which widens at it goes upward. + +> u + +You are at the base of a nearly vertical cliff. There are some +slim footholds which would enable you to climb up, but it looks +extremely dangerous. Here at the base of the cliff lie the remains +of several earlier adventurers who apparently failed to make it. + +> u + +You are climbing along a nearly vertical cliff. + +> u + +Just as you reach the top, your foot slips on a loose rock and you +make one last desperate grab. Your luck holds, as does your grip. +With an enormous heave, you lift yourself to the ledge above. + +You are on a small ledge at the top of a nearly vertical cliff. +There is a low crawl leading off to the northeast. + +> ne + +You have reached a dead end. + +There is a richly-carved ebony statuette here! + +> take ebony + +OK + +> sw + +You're at top of cliff. + +> d + +You are climbing along a nearly vertical cliff. + +> d + +You're at base of cliff. + +> d + +You are on a very steep incline, which widens at it goes upward. + +> d + +You are scrambling along a treacherously steep, rocky passage. + +> d + +You're north of reservoir. + +The waters have parted to form a narrow path across the reservoir. + +> take water + +Your bottle is now full of water. + +> s + +You're at bottom of reservoir. + +> s + +You're at reservoir. + +The waters have parted to form a narrow path across the reservoir. + +> s + +You are in a north/south canyon about 25 feet across. The floor is +covered by white mist seeping in from the north. The walls extend +upward for well over 100 feet. Suspended from some unseen point far +above you, an enormous two-sided mirror is hanging parallel to and +midway between the canyon walls. (The mirror is obviously provided +for the use of the dwarves who, as you know, are extremely vain.) A +small window can be seen in either wall, some fifty feet up. + +> s + +You are in a secret n/s canyon above a large room. + +> d + +You're in Slab Room. + +> s + +You're at west end of Twopit Room. + +The top of a 12-foot-tall beanstalk is poking out of the west pit. + +> d + +You're in west pit. + +There is a 12-foot-tall beanstalk stretching up out of the pit, +bellowing "WATER!! WATER!!" + +> water plant + +The plant grows explosively, almost filling the bottom of the pit. + +You're in west pit. + +There is a gigantic beanstalk stretching all the way up to the hole. + +> u + +You're at west end of Twopit Room. + +There is a huge beanstalk growing out of the west pit up to the hole. + +> e + +You are at the east end of the Twopit Room. The floor here is +littered with thin rock slabs, which make it easy to descend the pits. +There is a path here bypassing the pits to connect passages from east +and west. There are holes all over, but the only big one is on the +wall directly over the west pit where you can't get to it. + +There is a huge beanstalk growing out of the west pit up to the hole. + +> d + +You are at the bottom of the eastern pit in the Twopit Room. There is +a small pool of oil in one corner of the pit. + +> get oil + +Your bottle is now full of oil. + +> u + +You're at east end of Twopit Room. + +There is a huge beanstalk growing out of the west pit up to the hole. + +> w + +You're at west end of Twopit Room. + +There is a huge beanstalk growing out of the west pit up to the hole. + +> d + +You're in west pit. + +There is a gigantic beanstalk stretching all the way up to the hole. + +> climb + +You clamber up the plant and scurry through the hole at the top. + +You are in a long, narrow corridor stretching out of sight to the +west. At the eastern end is a hole through which you can see a +profusion of leaves. + +> w + +You are in the Giant Room. The ceiling here is too high up for your +lamp to show it. Cavernous passages lead east, north, and south. On +the west wall is scrawled the inscription, "FEE FIE FOE FOO" [sic]. + +There is a large nest here, full of golden eggs! + +> n + +You are at one end of an immense north/south passage. + +The way north is barred by a massive, rusty, iron door. + +> oil door + +The oil has freed up the hinges so that the door will now move, +although it requires some effort. + +> drop bottle + +OK + +> drop appendage + +OK + +> n + +You are in a magnificent cavern with a rushing stream, which cascades +over a sparkling waterfall into a roaring whirlpool which disappears +through a hole in the floor. Passages exit to the south and west. + +There is a jewel-encrusted trident here! + +> take trident + +OK + +> w + +You are at the top of a steep incline above a large room. You could +climb down here, but you would not be able to climb up. There is a +passage leading back to the north. + +> d + +You are in a large low room. Crawls lead north, se, and sw. + +> se + +This is the Oriental Room. Ancient oriental cave drawings cover the +walls. A gently sloping passage leads upward to the north, another +passage leads se, and a hands and knees crawl leads west. + +There is a delicate, precious, ming vase here! + +> n + +You are following a wide path around the outer edge of a large cavern. +Far below, through a heavy white mist, strange splashing noises can be +heard. The mist rises up through a fissure in the ceiling. The path +exits to the south and west. + +> w + +You are in an alcove. A small nw path seems to widen after a short +distance. An extremely tight tunnel leads east. It looks like a very +tight squeeze. An eerie light can be seen at the other end. + +> inven + +You are currently holding the following: +Brass lantern +Dwarf's axe +Jeweled trident +Ebony statuette + +> drop trident + +OK + +> drop ebony + +OK + +> drop axe + +OK + +> drop lantern + +OK + +> e + +You're in Plover Room. + +There is an emerald here the size of a plover's egg! + +> take emerald + +OK + +> w + +You're in alcove. + +There is a lamp shining nearby. + +There is a little axe here. + +There is a richly-carved ebony statuette here! + +There is a jewel-encrusted trident here! + +> take lamp + +OK + +> take axe + +OK + +> take ebony + +OK + +> take trident + +OK + +> nw + +You're in misty cavern. + +> s + +You're in Oriental Room. + +There is a delicate, precious, ming vase here! + +> take vase + +OK + +> se + +You are in a room whose walls resemble swiss cheese. Obvious passages +go west, east, ne, and nw. Part of the room is occupied by a large +bedrock block. + +> e + +You are in the Soft Room. The walls are covered with heavy curtains, +the floor with a thick pile carpet. Moss covers the ceiling. + +A small velvet pillow lies on the floor. + +> take pillow + +OK + +> w + +You're in Swiss Cheese Room. + +> ne + +You're in Bedquilt. + +> e + +You are at a complex junction. A low hands and knees passage from the +north joins a higher crawl from the east to make a walking passage +going west. There is also a large room above. The air is damp here. + +> n + +You're in a large room carved out of sedimentary rock. The floor and +walls are littered with bits of shells imbedded in the stone. A +shallow passage proceeds downward, and a somewhat steeper one leads +up. A low hands and knees passage enters from the south. + +There is an enormous clam here with its shell tightly closed. + +> n + +There is no way to go that direction. + +You're in Shell Room. + +There is an enormous clam here with its shell tightly closed. + +> seed 1635997320 +Seed set to 1635997320 + +You're in Shell Room. + +There is an enormous clam here with its shell tightly closed. + +> n + +There is no way to go that direction. + +You're in Shell Room. + +There is an enormous clam here with its shell tightly closed. + +> + +> + +> + +> + + +You scored 179 out of a possible 430, using 216 turns. + +You may now consider yourself a "Seasoned Adventurer". + +To achieve the next higher rating, you need 72 more points. diff --git a/tests/seedcrash.log b/tests/seedcrash.log new file mode 100644 index 0000000..4ee9887 --- /dev/null +++ b/tests/seedcrash.log @@ -0,0 +1,225 @@ +## This produced a crash before the control path after seed was fixed. +n +seed 1635997320 +in +take lamp +xyzzy +take rod +e +take cage +w +on +w +w +drop rod +take bird +take rod +w +free bird +wave rod +drop rod +take bird +take jade +e +e +e +off +xyzzy +drop jade +xyzzy +on +w +w +w +take rod +d +w +wave rod +drop rod +e +n +free bird +take bird +s +take jewelry +n +sw +w +feed dragon +kill dragon +yes +drink blood +take rug +e +e +n +take silver +n +off +plugh +drop jewelry +drop rug +drop silver +out +s +w +n +take appendage +free bird +drop cage +listen +s +s +n +in +take water +plugh +on +plover +ne +take pyramid +s +plover +s +d +take axe +u +s +up +w +w +w +w +throw axe +take axe +w +s +sw +se +s +kill machine +s +s +kill ogre +n +take ruby +s +w +n +n +n +nw +d +e +e +e +take diamonds +e +e +drop bottle +s +take gold +n +n +n +n +off +plugh +drop gold +drop diamonds +drop pyramid +drop ruby +plugh +on +s +s +u +take water +throw axe +take axe +n +n +d +bedquilt +slab +s +d +water plant +u +w +u +reservoir +F'UNJ +n +n +nw +u +u +u +u +ne +take ebony +sw +d +d +d +d +d +take water +s +s +s +s +d +s +d +water plant +u +e +d +get oil +u +w +d +climb +w +n +oil door +drop bottle +drop appendage +n +take trident +w +d +se +n +w +inven +drop trident +drop ebony +drop axe +drop lantern +e +take emerald +w +take lamp +take axe +take ebony +take trident +nw +s +take vase +se +e +take pillow +w +ne +e +n +n +seed 1635997320 +n + + + + From ec031b0417d85418e85d65e4c7fa5de609b568e0 Mon Sep 17 00:00:00 2001 From: "Eric S. Raymond" Date: Thu, 15 Jun 2017 17:34:06 -0400 Subject: [PATCH 3/7] Name another magic number. --- advent.h | 3 ++- main.c | 8 ++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/advent.h b/advent.h index 6ddbbbe..1f2bd8c 100644 --- a/advent.h +++ b/advent.h @@ -12,7 +12,8 @@ #define MAXPARMS 25 #define INVLIMIT 7 #define INTRANSITIVE -1 /* illegal object number */ -#define SPECIALBASE 300 /* base umber of special rooms */ +#define SPECIALBASE 300 /* base number of special rooms */ +#define WARNTIME 30 /* late game starts at game.limit-this */ typedef long token_t; /* word token - someday this will be char[TOKLEN+1] */ typedef long vocab_t; /* index into a vocabulary array */ diff --git a/main.c b/main.c index 5b35f6f..fbd7de0 100644 --- a/main.c +++ b/main.c @@ -248,8 +248,8 @@ static void checkhints(FILE *cmdin) SETPRM(1,HINTS[hint][2],HINTS[hint][2]); RSPEAK(HINT_COST); game.hinted[hint]=YES(cmdin,WANT_HINT,HINTS[hint][4],OK_MAN); - if (game.hinted[hint] && game.limit > 30) - game.limit=game.limit+30*HINTS[hint][2]; + if (game.hinted[hint] && game.limit > WARNTIME) + game.limit += WARNTIME*HINTS[hint][2]; } } } @@ -831,7 +831,7 @@ static void lampcheck(void) * Second is for other cases of lamp dying. 12400 is when it * goes out. Even then, he can explore outside for a while * if desired. */ - if (game.limit<=30 && HERE(BATTER) && game.prop[BATTER]==0 && HERE(LAMP)) + if (game.limit <= WARNTIME && HERE(BATTER) && game.prop[BATTER]==0 && HERE(LAMP)) { RSPEAK(REPLACE_BATTERIES); game.prop[BATTER]=1; @@ -844,7 +844,7 @@ static void lampcheck(void) game.prop[LAMP]=0; if (HERE(LAMP)) RSPEAK(LAMP_OUT); - } else if (game.limit <= 30) { + } else if (game.limit <= WARNTIME) { if (!game.lmwarn && HERE(LAMP)) { game.lmwarn=true; int spk=GET_BATTERIES; From e34bd8acf631dd609b4b05252df3a1ea49e24c9b Mon Sep 17 00:00:00 2001 From: "Eric S. Raymond" Date: Thu, 15 Jun 2017 17:39:53 -0400 Subject: [PATCH 4/7] Documentation polishing. --- notes.adoc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/notes.adoc b/notes.adoc index cc4246c..5e33b5a 100644 --- a/notes.adoc +++ b/notes.adoc @@ -113,6 +113,7 @@ ways: We don't need whatever minor performance gains this might collect, and the choice to refrain will make forward translation into future languages easier. + * There are a few gotos left that resist restructuring; all of these are in the principal command interpreter function implementing its state machine. @@ -124,7 +125,7 @@ ways: compromise forward-portability to other languages. * The code still has an unfortunately high density of magic numbers - in - particular, numeric object and room IDs. There are plans to fix this. + particular, numeric object IDs. There are plans to fix this. * Much of the code still uses FORTRAN-style uppercase names. From 2182dc23ff80e33a10952fcd9c1cfe25c91b971f Mon Sep 17 00:00:00 2001 From: "Eric S. Raymond" Date: Thu, 15 Jun 2017 17:58:52 -0400 Subject: [PATCH 5/7] Documentation polishing. --- notes.adoc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/notes.adoc b/notes.adoc index 5e33b5a..a4eabf4 100644 --- a/notes.adoc +++ b/notes.adoc @@ -129,6 +129,9 @@ ways: * Much of the code still uses FORTRAN-style uppercase names. +* The code still assumes one-origin array indexing. Thus, arrays are + a cell larger than they strictly need to be and cell 0 is unused. + * The code is still mostly typeless, slinging around machine longs like a FORTRAN or BCPL program. Some (incomplete) effort has been made to introduce semantic types. From eaee02aa09d1db40ea10d3b77e7df1e2e9c6b9ba Mon Sep 17 00:00:00 2001 From: "Eric S. Raymond" Date: Thu, 15 Jun 2017 19:39:43 -0400 Subject: [PATCH 6/7] Squasgh -Wextra warnings. --- Makefile | 2 +- actions.c | 4 ++-- misc.c | 6 +++--- notes.adoc | 2 +- score.c | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/Makefile b/Makefile index 88fd807..3c0e965 100644 --- a/Makefile +++ b/Makefile @@ -22,7 +22,7 @@ VERS=1.0 CC?=gcc -CCFLAGS+=-std=c99 -D _DEFAULT_SOURCE -Wall -Wpedantic -g +CCFLAGS+=-std=c99 -D _DEFAULT_SOURCE -Wall -Wpedantic -Wextra -g LIBS= UNAME_S := $(shell uname -s) ifeq ($(UNAME_S),Linux) diff --git a/actions.c b/actions.c index e88773e..346d04a 100644 --- a/actions.c +++ b/actions.c @@ -614,7 +614,7 @@ static int fly(token_t verb, token_t obj) return GO_TERMINATE; } -static int inven(token_t obj) +static int inven(void) /* Inventory. If object, treat same as find. Else report on current burden. */ { int spk=NO_CARRY; @@ -1087,7 +1087,7 @@ int action(FILE *input, enum speechpart part, long verb, token_t obj) case 16: /* TOSS */ return GO_UNKNOWN; case 17: /* QUIT */ return quit(input); case 18: /* FIND */ return GO_UNKNOWN; - case 19: /* INVEN */ return inven(obj); + case 19: /* INVEN */ return inven(); case 20: /* FEED */ return GO_UNKNOWN; case 21: /* FILL */ return fill(verb, obj); case 22: /* BLAST */ return blast(); diff --git a/misc.c b/misc.c index b0f24b8..243381a 100644 --- a/misc.c +++ b/misc.c @@ -67,7 +67,7 @@ void newspeak(char* msg) // Handle format specifiers (including the custom %C, %L, %S) by adjusting the parameter accordingly, and replacing the specifier with %s. int pi = 0; // parameter index - for (int i = 0; i < strlen(msg); ++i) + for (int i = 0; i < (int)strlen(msg); ++i) { if (msg[i] == '%') { @@ -105,7 +105,7 @@ void newspeak(char* msg) { copy[i + 1] = 's'; packed_to_token(PARMS[pi], parameters[pi]); - for (int j = 0; j < strlen(parameters[pi]); ++j) + for (int j = 0; j < (int)strlen(parameters[pi]); ++j) { parameters[pi][j] = tolower(parameters[pi][j]); } @@ -116,7 +116,7 @@ void newspeak(char* msg) { copy[i + 1] = 's'; packed_to_token(PARMS[pi], parameters[pi]); - for (int j = 0; j < strlen(parameters[pi]); ++j) + for (int j = 0; j < (int)strlen(parameters[pi]); ++j) { parameters[pi][j] = tolower(parameters[pi][j]); } diff --git a/notes.adoc b/notes.adoc index a4eabf4..fd3504a 100644 --- a/notes.adoc +++ b/notes.adoc @@ -11,7 +11,7 @@ The principal maintainers of this code are Eric S. Raymond and Jason Ninneman. Eric received Don Woods's encouragement to update and ship the game; Jason signed on early in the process to help. The assistance of Peje Nilsson in restructuring some particularly grotty gotos is -gratefully acknowledged. +gratefully acknowledged. Petr Voropaev contributed fuzz testing. == Nomenclature == diff --git a/score.c b/score.c index a9ab765..594b637 100644 --- a/score.c +++ b/score.c @@ -110,7 +110,7 @@ void score(enum termination mode) SETPRM(1,score,mxscor); SETPRM(3,game.turns,game.turns); RSPEAK(TOTAL_SCORE); - for (long i=1; i<=CLSSES; i++) { + for (long i=1; i<=(long)CLSSES; i++) { if(CVAL[i] >= score) { newspeak(class_messages[i]); i=CVAL[i]+1-score; From 7ccef92f7f89c2c41192665d79eadbcb6872f86a Mon Sep 17 00:00:00 2001 From: "Eric S. Raymond" Date: Thu, 15 Jun 2017 21:36:06 -0400 Subject: [PATCH 7/7] Reduce verbosity. --- tests/seedcrash.log | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/seedcrash.log b/tests/seedcrash.log index 4ee9887..7f364cc 100644 --- a/tests/seedcrash.log +++ b/tests/seedcrash.log @@ -1,4 +1,4 @@ -## This produced a crash before the control path after seed was fixed. +## This crashed advent before the control path after seed was fixed. n seed 1635997320 in