Hello, before I begin to go into detail about this post, I want to state that:
  • I AM NOT the owner of this account.
  • I was told by an SE support representitive to borrow a friends account to make this post.
  • The information I post here is strictly to help get this bug fixed.
  • I understand this has been reported before, but this is a full detail post explaining the cause and a fix.

Platform: Windows [But this bug happens on all platforms.]
ISP: Local reseller, not a major ISP.
Type of Internet Connection: Radio / DSL
Date & Time: N/A (This is a pre-existing bug and has been confirmed already.)
Frequency: Very Often (Again, pre-existing bug that is confirmed and known.)
Character Name: N/A [This bug occurs on all characters.]
Race: N/A [This bug occurs on all races.]
World: N/A [This bug occurs on all worlds.]
Main Job: N/A [This bug occurs on all jobs.]
Support Job: N/A [This bug occurs on all jobs.]
Area and Coordinates: N/A [This bug occurs anywhere fishing is available.]
Party or Solo: N/A [This bug occurs regardless if you are in a party or not.]
NPC Name: N/A [No NPC is involved in this bug.]
Monster Name: N/A [No monster is involved in this bug.]

Steps:
  1. Equip a rod and bait to fish.
  2. Begin fishing in a valid fishing location.
  3. Attempt to fight whatever catches the line.

At this point the crash may / may not happen.

Information Regarding This Crash
Another thread currently details this crash at:
http://forum.square-enix.com/ffxi/threads/43901-Game-crash-while-fishing?highlight=fishing

When the crash occurs, you can open FFXiMain.dll in a debugger and stop at the cause of the crash. For example, a recent occurrence for me was crashed here:

Code:
.text:10081CC0 sub_10081CC0    proc near               ; CODE XREF: sub_10081630+9Bp
.text:10081CC0                 mov     eax, dword_1041BCAC
.text:10081CC5                 test    eax, eax
.text:10081CC7                 jz      short loc_10081CFF
.text:10081CC9                 push    esi
.text:10081CCA                 call    _rand
.text:10081CCF                 cdq
.text:10081CD0                 mov     ecx, 33h
.text:10081CD5                 idiv    ecx
.text:10081CD7                 mov     esi, edx
.text:10081CD9                 call    _rand
.text:10081CDE                 cdq
.text:10081CDF                 mov     ecx, 33h
.text:10081CE4                 idiv    ecx
.text:10081CE6                 mov     ecx, dword_1041BCAC
.text:10081CEC                 mov     eax, [ecx]
.text:10081CEE                 add     esi, edx
.text:10081CF0                 xor     edx, edx
.text:10081CF2                 div     esi
.text:10081CF4                 pop     esi
.text:10081CF5                 neg     eax
.text:10081CF7                 sbb     eax, eax
.text:10081CF9                 neg     eax
.text:10081CFB                 mov     [ecx+4], eax
.text:10081CFE                 retn
.text:10081CFF ; ---------------------------------------------------------------------------
.text:10081CFF
.text:10081CFF loc_10081CFF:                           ; CODE XREF: sub_10081CC0+7j
.text:10081CFF                 mov     large dword ptr ds:4, 0
.text:10081D09                 retn
.text:10081D09 sub_10081CC0    endp
The issue at hand is the fact that this function has the possibility to divide by zero. If we translate this code to a semi-readable format, we will have:

Code:
    v1 = rand() % 51;
    result = *(_DWORD *)dword_1042D1CC / (unsigned int)(rand() % 51 + v1) != 0;
    *(_DWORD *)(dword_1042D1CC + 4) = result;
For those that understand coding, v1 has the potential to be 0.
rand() % 51 means that we want a random number between (and including) 0 and 51.

The next line shows that we can potentially cause a divide by zero error here:
Code:
result = *(_DWORD *)dword_1042D1CC / (unsigned int)(rand() % 51 + v1) != 0;
If both the v1 variable and the new rand()%51 call are both 0, we land up attempting to divide the value of 0x1042D1CC by zero resulting in a crash.

If we trace what calls this function we land up in another function that has, yet another, divide by zero possibility. We have the chunk of code here:
Code:
        *(_DWORD *)(v25 + 8) = (signed __int64)((double)*(signed int *)(v25 + 8) + v26);
        *(_WORD *)(dword_105C3B88 + 58) = (signed __int64)((double)*(signed int *)(dword_1042D1D0 + 8)
                                                         * 100.0
                                                         / (double)*(signed int *)dword_1042D1D0);
        result = *(_DWORD *)(dword_1042D1D0 + 4);
If the value of 0x1042D1D0 is 0, then we are yet again dividing by zero.

From other reports and crash dumps I have seen from others, there are other fishing crashes, however this one seems to be the one that happens the most and has been reported the most.

Again, this is just information to try and help you resolve this issue and get it fixed.

And again, I am not the owner of this account, I was told by an SE representative to use a friends account to make this post because I do not have an active subscription at this time.

The representatives name was: "Agent Daniel A"

~ atom0s