mirror of
https://github.com/moparisthebest/curl
synced 2024-11-10 11:35:07 -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
|
changelog of the current development status, as one or more of these problems
|
||||||
may have been fixed since this was written!
|
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
|
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
|
"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
|
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;
|
tftp_state_data_t *state;
|
||||||
int rc;
|
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) {
|
if((state = conn->proto.tftp = calloc(sizeof(tftp_state_data_t), 1))==NULL) {
|
||||||
return CURLE_OUT_OF_MEMORY;
|
return CURLE_OUT_OF_MEMORY;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user