So I found out that if you have a weapon that doesn't have a credit cost (like a system or a fighter weapon) and you custom produce it, you will get a "Fatal: / by zero" error and the game will CTD at the end of the month.
Full stack trace:
Spoiler
76293 [Thread-4] ERROR com.fs.starfarer.combat.CombatMain - java.lang.ArithmeticException: / by zero
java.lang.ArithmeticException: / by zero
at com.fs.starfarer.api.impl.campaign.CoreScript.doCustomProduction(CoreScript.java:783)
at com.fs.starfarer.api.impl.campaign.CoreScript.reportEconomyMonthEnd(CoreScript.java:919)
at com.fs.starfarer.campaign.CampaignEngine.reportEconomyMonthEnd(Unknown Source)
at com.fs.starfarer.campaign.econ.reach.ReachEconomyStepper.doEndOfMonthStuff(Unknown Source)
at com.fs.starfarer.campaign.econ.reach.ReachEconomyStepper.nextFrame(Unknown Source)
at com.fs.starfarer.campaign.econ.Economy.advance(Unknown Source)
at com.fs.starfarer.campaign.CampaignEngine.advance(Unknown Source)
at com.fs.starfarer.campaign.CampaignState.advance(Unknown Source)
at com.fs.starfarer.BaseGameState.traverse(Unknown Source)
at com.fs.state.AppDriver.begin(Unknown Source)
at com.fs.starfarer.combat.CombatMain.main(Unknown Source)
at com.fs.starfarer.StarfarerLauncher$1.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Steps to reproduce:
Step 0: Have a colony that can custom order/ produce weapons
Step 1: Order the free weapon
Step 2: Wait until the end of the month
Step 3: Crash