mirror of
https://github.com/moparisthebest/curl
synced 2024-12-21 15:48:49 -05:00
Added a run-time check to warn if TFTP is going to fail due to portability
issues in the code.
This commit is contained in:
parent
1d8212e53a
commit
8c6f654b26
@ -3,6 +3,8 @@ join in and help us correct one or more of these! Also be sure to check the
|
||||
changelog of the current development status, as one or more of these problems
|
||||
may have been fixed since this was written!
|
||||
|
||||
28. The TFTP code is not portable and will fail on some architectures.
|
||||
|
||||
26. NTLM authentication using SSPI (on Windows) when (lib)curl is running in
|
||||
"system context" will make it use wrong(?) user name - at least when compared
|
||||
to what winhttp does. See http://curl.haxx.se/bug/view.cgi?id=1281867
|
||||
|
19
lib/tftp.c
19
lib/tftp.c
@ -529,6 +529,25 @@ CURLcode Curl_tftp_connect(struct connectdata *conn, bool *done)
|
||||
tftp_state_data_t *state;
|
||||
int rc;
|
||||
|
||||
/*
|
||||
* The TFTP code is not portable because it sends C structs directly over
|
||||
* the wire. Since C gives compiler writers a wide latitude in padding and
|
||||
* aligning structs, this fails on many architectures (e.g. ARM).
|
||||
*
|
||||
* The only portable way to fix this is to copy each struct item into a
|
||||
* flat buffer and send the flat buffer instead of the struct. The
|
||||
* alternative, trying to get the compiler to eliminate padding bytes
|
||||
* within the struct, is a nightmare to maintain (each compiler does it
|
||||
* differently), and is still not guaranteed to work because some
|
||||
* architectures can't handle the resulting alignment.
|
||||
*
|
||||
* This check can be removed once the code has been fixed.
|
||||
*/
|
||||
if(sizeof(struct tftp_packet) != 516) {
|
||||
failf(conn->data, "tftp not supported on this architecture");
|
||||
return CURLE_FAILED_INIT;
|
||||
}
|
||||
|
||||
if((state = conn->proto.tftp = calloc(sizeof(tftp_state_data_t), 1))==NULL) {
|
||||
return CURLE_OUT_OF_MEMORY;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user