Twiddle: don't read off the end of parameter strings ending 'm'
Free new game_state properly in Mosaic's execute_move()
Remember to free the numcolours array from Pattern's drawstate
Don't leak duplicate edges in Untangle
Undead: check the return value of sscanf() in execute_move()
Remember to free the to_draw member from Net's drawstate
Don't leak grids in Loopy's validate_desc()
Remember to free the actual_board array in Mosaic
Fix memory leaks in Keen's validate_desc()
Allow more general cross-shaped boards in Pegs
Don't allow moves that change the constraints in Unequal
Cleanly reject more ill-formed solve moves in Flood
Check state is valid at the end of a move in Pearl
Mention how old the 15-puzzle is
Forbid game descriptions with joined islands in Bridges
Forbid impossible moves in Bridges
Unequal: fix sense error in latin_solver_alloc fix.
Mines: Add assertions to range-check conversions to short
Limit width and height to SHRT_MAX in Mines
Range: Don't fail an assertion on an all-black board
Unequal: Don't insist that solve moves must actually solve
Pearl: fix bounds check in previous commit.
Pearl: fix assertion failure on bad puzzle.
latin_solver_alloc: handle clashing numbers in input grid.
Palisade: replace dfs_dsf() with a simple iteration.
Tolerate incorrect solutions in Inertia
Forbid lines off the grid in Pearl
Dominosa: require the two halves of a domino to be adjacent
Tighten validation of Tents game descriptions
Fix move validation in Netslide
Avoid invalid moves when solving Tracks
Mines: Don't check if the player has won if they've already lost
Mines: forbid moves that flag or unflag an exposed square
Document numeric input in Undead
Remove an odd mention of NO_PRINTING from Mosaic
Explicitly document that various function pointers can be NULL
Remove various unused game functions
Loopy: Specify can_solve as true, rather than 1
Validate the number of pegs and holes in a Pegs game ID
Limit number of mines in Mines game description
Don't segfault on premature solve moves in Mines
Cleanly reject ill-formed solve moves in Flood
Forbid moves that fill with the current colour in Flood
Don't allow Bridges games with < 2 islands
KaiOS: explicitly set the font family to Open Sans
Increase KaiAds timeout to 10 seconds
Add validate_params bounds checks in a few more games.
Black Box: reject negative ball counts in game_params.
Add myself to copyright holders and update copyright years
Add a content security policy for the KaiOS app
Update comment in manifest.pl based on experience
kaios/manifest.pl: canonicalise the JSON output.
Install KaiOS app docs even without Halibut
Use the main Web site version of the docs for KaiOS apps
kaios: Add hooks for the KaiAds API
js: Quicker keyboard access to menu items
kaios: Make F10 open and close the menu
Correct type of "locales" in KaiOS manifest
Deliver banner images from build script
Generate a possibly suitable marketing banner for the KaiStore
kaios: Provide a populated "locales" field in the manifest
kaios: Turn off :hover highlighting in menus
Buildscr bits for making KaiOS builds
kaios: Put version numbers in manifest files
kaios: Hack out everything that needs dialogue boxes
js: Remove an outdated reference to the "invisible Custom option"
js: Tolerate the absence of various UI elements from the HTML
js: Look up elements in the DOM as early as possible
js: Simpler and more robust startup procedure
js: Use current_key_label() to label feature phone softkeys
js: Rename update_undo_redo() as post_move()
js: Make soft-key labels generate key events when clicked
kaios: Major parts of a build for KaiOS
Properly-styled icons for KaiOS
js: Have the "SoftRight" key open the menu by focussing it
Allow repeated "solve" operations in Guess
Tracks: tighten up the 'illegal solve submoves' fix.
Tracks: let solve make illegal moves
Fix mosaic's validate_desc: 9 is valid
Avoid unnecessary timestamp bumps on generated-games.h.
Fix memory leak in convert_tilesize
Fix use-after-free in fuzzpuzz
Correct syntax of fuzzpuzz.dict
Tracks: make sure moves are valid in execute_move()
Towers: reject descriptions with odd characters at the end
Mines: No moving once you're dead!
Untangle: forbid descriptions that connect a node to itself
Tighten Bridges' validate_desc()
Filling: validate length of auto-solve move strings
Explain what decode_ui() should do with invalid input
Same Game: reject moves with unexpected characters in
Palisade: remove assertion from decode_ui()
Mosaic: fault out-of-bounds moves in execute_move()
When loading, don't decode_ui unless we have a UI
Don't allow negative clues in Pattern
Palisade: don't leak memory on a bad move
Black Box: correct order of validation checks for "F" commands
Last-ditch point-count limit for Untangle
Adjust Undead upper grid-size limit to avoid overflow